2011-12-23 11 views
10

Mam następujący typ jest zarejestrowany w Jedności:Jak mogę przekazać argumenty konstruktora, gdy rejestruję typ w Unity?

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

Definicja i konstruktorów dla AzureTable są następujące:

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

można określić argumenty konstruktora w linii RegisterType? Muszę być w stanie przekazać na przykład w tableName.

To jest kontynuacja mojego ostatniego pytania. Odpowiedziałem na to pytanie, ale nie odpowiedziałem wyraźnie, jak uzyskać argumenty konstruktora.

Odpowiedz

23

Oto strona MSDN opisująca, czego potrzebujesz, Injecting Values. Spójrz na użycie klasy InjectionConstructor w linii typu rejestru. Będziesz skończyć z taką linię:

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

Parametry konstruktora InjectionConstructor są wartości które mają być przekazane do AzureTable<Account>. Wszelkie parametry typeof pozostawiają jedność, aby rozwiązać wartość do użycia. W przeciwnym razie można po prostu zdać realizacji:

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

lub nazwany parametr:

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

Bardzo dziękuję za pomoc. Właśnie tego potrzebuję. –

4

możesz dać tę szansę:

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

Więcej info z MSDN here.

+0

Bardzo dziękuję za pomoc. Właśnie tego potrzebuję. –

+0

Nie ma problemu, moja przyjemność. Wesołych Świąt :) –

Powiązane problemy