2012-08-08 13 views
35

tengo una clase con el constructor de esta manera:Unidad InjectionConstructor para el constructor multiparam anulará solamente uno

public class Bar 
{ 
    public Bar(IFoo foo, IFoo2 foo2, IFoo3 foo3, IFooN fooN, String text) 
    { 

    } 
} 

Quiero registrar Bar en la Unidad y proporcionar un valor para el texto:

unity.RegisterType<Bar, Bar>(new InjectionConstructor("123")); 

Sin embargo No puedo hacer esto porque no hay un solo constructor de parámetros para Bar.

Hay una manera de proporcionar un valor para el texto sin especificar todos los demás parámetros como ResolvedParameter<IFooN> etc. Realmente no me gusta, hay muchos códigos, y cada vez que cambio un constructor de barras, necesito agregar otro ResolvedParameter

+0

Fwiw, esta es tan fácil en autofac fuera de la caja: 'builder.RegisterType () .WithParameter ("el valor de texto "texto" ")' –

Respuesta

35

Unity no puede hacerlo de la caja. Lo mejor que puede hacer es:

container.RegisterType<Bar>(
    new InjectionConstructor(
     typeof(IFoo), typeof(IFoo2), typeof(IFoo3), typeof(IFooN), "123")); 

o puede utilizar el SmartConstructor proporcionada por el proyecto TecX. This blog post describe algunos antecedentes.

registro se vería así:

container.RegisterType<Bar>(new SmartConstructor("text", "123")); 
+1

Si necesita pasar un valor nulo en lugar de "123", necesitará usar el nuevo parámetro de inyección (nulo) –

0
public void Register<TFrom>(params object[] constructorParams) where TFrom : class 
     { 
      _container.RegisterType<TFrom>(new InjectionConstructor(constructorParams)); 
     } 
Cuestiones relacionadas