2010-10-23 8 views
28

¿Cómo puedo registertype con el contenedor donde el tipo no tiene constructor SIN PARÁMETRO.¿Cómo registrar a Type con un constructor PARAMETER?

De hecho, mi constructor acepta una cadena, y normalmente paso una cadena que representa una ruta.

Entonces, cuando lo resuelvo, ¿se crea automáticamente el nuevo tipo pero se pasa una cadena?

Respuesta

52

Es simple. Cuando registra el constructor, solo 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, que harías:

container.RegisterType<MyType>(new InjectionConstructor("My string here")); 

que seleccionará a un constructor que toma una sola cadena, y en tiempo de resolución se pasa a la cadena "Mi cadena aquí".

El XML equivalente (utilizando el esquema 2.0 config) sería:

<register type="MyType"> 
    <constructor> 
    <param name="whateverParameterNameIs" value="My string here" /> 
    </constructor> 
</register> 
+0

Gracias, justo lo que necesitaba. – Martin

14

También puede utilizar el construido en InjectionConstructor y ResolvedParameter donde connectionString es la cadena de conexión de base de datos que se utilizará.

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

Se podría llevarlo aún más lejos y tener múltiples instancias con nombre de MyObjectContext, cada uno con su propia cadena de conexión a bases de datos diferentes.

Cuestiones relacionadas