2009-10-11 33 views
25

He estado trabajando con el contenedor Unity IOC de Microsoft. Hay un montón de sobrecargas para el método RegisterType() todos mirando similar a¿Para qué sirven los miembros de inyección en RegisterType()?

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

Me pregunto cuando los parámetros son para injectionMembers? No pude encontrar ninguna documentación para ellos (a pesar de que están en todas las sobrecargas) y ninguno de los códigos de muestra que utilicé los usó.

¿Falta algo aquí? ¿No son de uso común o simplemente me pierdo los ejemplos?

Respuesta

25

Se usa la sobrecarga con la matriz InjectionMember, cuando no proporciona un archivo de configuración que Unity le dice cómo crear una instancia del tipo dado o si desea crear una instancia de otra manera que no sea definida en el archivo de configuración .

Las sobrecargas se utilizan cuando se desea configurar un contenedor de unidades sin un archivo de configuración. Un InjectionMember puede ser una llamada de constructor, propiedad o método.

El siguiente código, tomado de la ayuda de Unity, muestra cómo usar InjectionMembers a través de la interfaz fluida del contenedor.

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

La siguiente configuración XML es equivalente al código anterior.

<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

Hay muchas partes del Contenedor de unidad que aún no he sentido la necesidad de usar. Su ejemplo coincide con varios de ellos (configuración XML, PropertyInjection y configuración de parámetros constantes para ser inyectados. ¡Gracias por apuntarme en la dirección correcta! Puede que no los necesite ahora, pero es bueno estar al tanto de lo que está disponible. –

0

También tenga en cuenta que, aunque aparecen en cada sobrecarga, no son necesarios.

creo que esto funciona porque InjectionMemeber es un tipo de matriz y es el último parámetro, por lo que puede tener cero o más valores separados por comas y la matriz es montado auto-mágicamente ...

+11

Casi. Es por la palabra clave params. –

Cuestiones relacionadas