2011-12-23 11 views
10

Tengo el siguiente tipo que se está registrada en la Unidad:¿Cómo puedo pasar argumentos de constructor cuando registro un tipo en Unity?

container.RegisterType<IAzureTable<Account>, AzureTable<Account>>(); 

La definición y constructores para AzureTable son los siguientes:

public class AzureTable<T> : AzureTableBase<T>, IInitializer where T : TableServiceEntity 
{ 

    public AzureTable() : this(CloudConfiguration.GetStorageAccount()) { } 
    public AzureTable(CloudStorageAccount account) : this(account, null) { } 
    public AzureTable(CloudStorageAccount account, string tableName) 
      : base(account, tableName) { } 

puedo especificar los argumentos de constructor en la línea RegisterType? Necesito poder pasar el tableName por ejemplo.

Esto es una continuación de mi última pregunta. Esa pregunta fue, creo, respondida, pero realmente no pregunté cómo conseguir los argumentos del constructor.

Respuesta

23

Aquí hay una página de MSDN que describe lo que necesita, Injecting Values. Eche un vistazo usando la clase InjectionConstructor en su línea de tipo de registro. Usted va a terminar con una línea como la siguiente:

container.RegisterType<IAzureTable<Account>, AzureTable<Account>>(new InjectionConstructor(typeof(CloudStorageAccount))); 

Los parámetros del constructor a InjectionConstructor son los valores que se transferirán a su AzureTable<Account>. Cualquier parámetro typeof deja la unidad para resolver el valor a usar. De lo contrario, simplemente puede pasar su aplicación:

CloudStorageAccount account = new CloudStorageAccount(); 
container.RegisterType<IAzureTable<Account>, AzureTable<Account>>(new InjectionConstructor(account)); 

O un parámetro denominado:

container.RegisterType<CloudStorageAccount>("MyAccount"); 
container.RegisterType<IAzureTable<Account>, AzureTable<Account>>(new InjectionConstructor(new ResolvedParameter<CloudStorageAccount>("MyAccount"))); 
+0

Muchas gracias por su ayuda. Esto es justo lo que necesito. –

4

usted podría dar a este un intento:

// Register your type: 
container.RegisterType<typeof(IAzureTable<Account>), typeof(AzureTable<Account>)>() 

// Then you can configure the constructor injection (also works for properties): 
container.Configure<InjectedMembers>() 
    .ConfigureInjectionFor<typeof(AzureTable<Account>>(
    new InjectionConstructor(myConstructorParam1, "my constructor parameter 2") // etc. 
); 

Más información de MSDN here.

+0

Muchas gracias por su ayuda. Esto es justo lo que necesito. –

+0

No hay problema, es un placer. Feliz Navidad :) –

Cuestiones relacionadas