dependency-injection - registertypes - unity ioc
¿Cómo registrarTipo con un constructor de PARÁMETROS? (2)
Es sencillo. Cuando registra el constructor, simplemente pasa el valor que desea inyectar para el parámetro. El contenedor coincide con su constructor según el tipo de valor (API) o el nombre del parámetro (XML).
En la API, harías:
container.RegisterType<MyType>(new InjectionConstructor("My string here"));
Eso seleccionará un constructor que toma una sola cadena, y en el momento de la resolución pasará la cadena "Mi cadena aquí".
El XML equivalente (usando el esquema de configuración 2.0) sería:
<register type="MyType">
<constructor>
<param name="whateverParameterNameIs" value="My string here" />
</constructor>
</register>
¿Cómo registro tipo con el contenedor donde el tipo no tiene el constructor NO PARAMETER?
De hecho, mi constructor acepta una cadena, y normalmente paso una cadena que representa una ruta.
Entonces, cuando resuelvo, ¿se crea automáticamente el nuevo tipo pero se pasa una cadena?
También puede usar el InjectionConstructor y el ResolvedParameter integrados, donde connectionString es la cadena de conexión de la base de datos que se usará.
// install a named string that holds the connection string to use
container.RegisterInstance<string>("MyConnectionString", connectionString, new ContainerControlledLifetimeManager());
// register the class that will use the connection string
container.RegisterType<MyNamespace.MyObjectContext, MyNamespace.MyObjectContext>(new InjectionConstructor(new ResolvedParameter<string>("MyConnectionString")));
var context = container.Resolve<MyNamespace.MyObjectContext>();
Podría ir incluso un paso más allá y tener múltiples instancias con nombre de MyObjectContext, cada una utilizando su propia cadena de conexión a diferentes bases de datos.