2011-12-23 24 views
10

tôi đã loại sau đây được đăng ký tại Unity:Làm thế nào tôi có thể vượt qua trong các đối số hàm tạo khi tôi đăng ký một loại trong Unity?

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

Định nghĩa và nhà thầu cho AzureTable như sau:

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

Tôi có thể xác định các đối số nhà xây dựng trong dòng RegisterType? Tôi cần để có thể vượt qua trong tableName ví dụ.

Đây là câu hỏi tiếp theo cho câu hỏi cuối cùng của tôi. Câu hỏi đó là tôi nghĩ rằng đã trả lời nhưng tôi đã không thực sự rõ ràng hỏi làm thế nào để có được các đối số constructor.

Trả lời

23

Đây là một trang MSDN mô tả những gì bạn yêu cầu, Injecting Values. Hãy xem sử dụng lớp InjectionConstructor trong dòng đăng ký của bạn. Bạn sẽ kết thúc với một dòng như thế này:

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

Các thông số constructor để InjectionConstructor là những giá trị được thông qua để AzureTable<Account> của bạn. Mọi thông số typeof để lại sự thống nhất để giải quyết giá trị sử dụng. Nếu không, bạn chỉ có thể vượt qua thực hiện của bạn:

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

Hoặc một tham số có tên:

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

Cảm ơn rất nhiều sự giúp đỡ của bạn. Đây chỉ là những gì tôi cần. –

4

Bạn có thể cung cấp cho một thử này:

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

Thông tin thêm từ MSDN here.

+0

Cảm ơn rất nhiều sự giúp đỡ của bạn. Đây chỉ là những gì tôi cần. –

+0

Không sao, tôi thích. Giáng sinh vui vẻ :) –

Các vấn đề liên quan