2011-12-23 101 views
10

我有以下類型被註冊在Unity:是我在Unity中註冊類型時如何傳入構造函數參數?

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

爲AzureTable的定義和構造函數如下:

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

我可以在RegisterType行指定的構造函數參數?例如,我需要能夠傳入tableName。

這是我最後一個問題的後續工作。這個問題是我想回答,但我沒有真正清楚如何獲得構造函數參數。

回答

23

這是一個描述你需要什麼的MSDN頁面,Injecting Values。看看在你的註冊類型行中使用InjectionConstructor類。您將結束與這樣一行:

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

構造函數參數InjectionConstructor是值傳遞到您的AzureTable<Account>。任何typeof參數都將統一以解決要使用的值。否則,你可以通過你實現:

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

或命名參數:

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

非常感謝您的幫助。這正是我需要的。 – 2011-12-23 10:49:07

4

你可以試試這個:從MSDN here

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

更多信息。

+0

非常感謝您的幫助。這正是我需要的。 – 2011-12-23 10:49:15

+0

沒問題,我的榮幸。聖誕節快樂 :) – 2011-12-23 12:05:27

相關問題