2011-12-23 6 views
10

Aşağıdaki tip Birlik kayıtlı olan adres:Unity'de bir türü kaydettiğimde kurucu argümanlarında nasıl geçebilirim?

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) { } 

ben RegisterType hattında yapıcı argümanları belirtebilir miyim şu şekildedir: AzureTable için

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

tanımı ve kurucular? Örneğin, tabloAdı içinde geçebilmem gerekir.

Bu son sorumun bir devamıdır. Bu soru bence cevaplandı ama ben gerçekten açık bir şekilde yapıcı argümanlarını nasıl alacağımı sormadım.

cevap

23

İşte neye ihtiyacınız olduğunu açıklayan bir MSDN sayfası, Injecting Values. Kayıt tipi satırınızda InjectionConstructor sınıfını kullanarak bir göz atın. Böyle bir çizgi ile sona erecek:

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

InjectionConstructor için yapıcı parametreleri değerler AzureTable<Account> geçirilecek bulunmaktadır. Kullanılacak değeri çözmek için typeof parametresi birliği bırakır.

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

Ya adlandırılmış parametre:

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

Yardımlarınız için çok teşekkürler. Bu sadece ihtiyacım olan şey. –

4

Bu denemeye olabilir: MSDN here den

// 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. 
); 

diğer bilgiler Aksi takdirde sadece uygulanmasını geçirebilir.

+0

Yardımlarınız için çok teşekkürler. Bu sadece ihtiyacım olan şey. –

+0

Sorun değil, zevkim. Mutlu Noeller :) –