2009-10-11 13 views
25

Pracuję z kontenerem IOC Microsoftu Unity. Istnieje kilka przeciążeń dla RegisterType() wszyscy szukają sposobu podobnego doDo czego służą wywołaniaInjectionMembers w wywołaniach RegisterType()?

IUnityContainer RegisterType(Type t, params InjectionMember[] injectionMembers); 

Zastanawiam gdy parametry injectionMembers są za? Nie mogłem znaleźć dla nich żadnej dokumentacji (mimo, że są w przeciążeniu) i żaden z przykładowego kodu, na który patrzyłem, nie używał ich.

Czy tu czegoś brakuje? Czy nie są one powszechnie używane, czy też po prostu tęsknię za przykładami?

Odpowiedz

25

Przeciążenie z tablicą InjectionMember jest używane, gdy nie podano pliku konfiguracyjnego, który Unity mówi, jak utworzyć instancję danego typu lub jeśli chcesz utworzyć instancję w inny sposób niż zdefiniowano w pliku konfiguracyjnym .

Przeciążenia są używane, gdy chcesz skonfigurować kontener jedności bez pliku konfiguracyjnego. InjectionMember może być wywołaniem konstruktora, właściwości lub metody.

Poniższy kod, pobrany z pomocy Unity, pokazuje, jak używać InjectionMembers poprzez płynny interfejs kontenera.

IUnityContainer myContainer = new UnityContainer(); 
myContainer.Configure<InjectedMembers>() 
    .ConfigureInjectionFor<MyObject>( 
    new InjectionConstructor(12, "Hello Unity!"), 
    new InjectionProperty("MyStringProperty", "SomeText")); 

Poniższa konfiguracja XML jest odpowiednikiem powyższego kodu.

<type type="MyObject" mapTo="MyObject" name="MyObject"> 
    <typeConfig extensionType="Microsoft.Practices.Unity.Configuration.TypeInjectionElement, Microsoft.Practices.Unity.Configuration"> 
    <constructor> 
     <param name="someInt" parameterType="int"> 
     <value value="12"/> 
     </param> 
     <param name="someText" parameterType="string"> 
     <value value="Hello Unity!"/> 
     </param> 
    </constructor> 
    <property name="MyStringProperty" propertyType="string"> 
     <value value="SomeText"/> 
    </property> 
    </typeConfig> 
</type> 
+0

Istnieje wiele części Pojemnik Unity Nie czułem potrzeby korzystania jeszcze. Twój przykład trafił w kilka z nich (konfiguracja XML, PropertyInjection i konfiguracja stałych parametrów, które mają zostać wstrzyknięte) .Dzięki, że wskazałeś mi właściwy kierunek, może nie potrzebuję ich teraz, ale miło jest być świadomym tego, co jest dostępne –

0

Należy również pamiętać, że chociaż pojawiają się przy każdym przeciążeniu, nie są wymagane.

myślę, że to działa, ponieważ InjectionMemeber to typ tablicy i jest ostatni parametr, dzięki czemu można mieć zero lub więcej oddzielonych przecinkami wartości i tablica zostanie zmontowane auto-magicznie ...

+11

Prawie. To z powodu słowa kluczowego params. –

Powiązane problemy