2012-01-13 15 views
20

Uso SimpleIoc de MVVM, me gustaría registrar una aplicación para una interfaz dada, pero la puesta en práctica requiere un parámetro en su constructor:MVVM SimpleIoc, cómo utilizar una interfaz cuando la implementación de la interfaz requiere parámetros de construcción

public class MyServiceImplementation : IMyService { 
    public MyServiceImplementation(string contructorString) { ... } 
} 

Tenía la esperanza de que el registro de la implementación de la interfaz funcionaría, pero SimpleIoc no tiene en cuenta la sugerencia cuando intenta resolver la interfaz.

SimpleIoc.Default.Register<MyServiceImplementation>(() => { 
    return new MyServiceImplementation("Hello World"); 
}); 

SimpleIoc.Default.Register<IMyService, MyServiceImplementation>(); 

¿Habría alguna manera de hacer esto con SimpleIoc, o debería considerar el uso de un Ioc más completo?

Editar: Esto hace el truco, pero todavía me pregunto por qué el formulario anterior no funciona.

SimpleIoc.Default.Register<IMyService>(() => { 
    return new MyServiceImplementation("Hello World"); 
}); 

Respuesta

23

La razón por la que su primer enfoque no funciona es que SimpleIOC no se usa a sí mismo para construir los objetos.

Dada su declaración

SimpleIoc.Default.Register<MyServiceImplementation>(() => { 
    return new MyServiceImplementation("Hello World"); 
}); 

SimpleIoc.Default.Register<IMyService, MyServiceImplementation>(); 

La llamada a SimpleIoc.Default.GetInstance<MyServiceImplementation>() ejecutará el método de fábrica, mientras la llamada a SimpleIoc.Default.GetInstance<IMyService>() no lo hará.

Una posible manera de cadena de las llamadas podrían ser para especificar un método de fábrica para ambos tipos, y IMyServiceMyServiceImplementation, es decir

SimpleIoc.Default.Register<MyServiceImplementation>(() => { 
    return new MyServiceImplementation("Hello World"); 
}); 

SimpleIoc.Default.Register<IMyService>(() => { 
    return SimpleIoc.Default.GetInstance<MyServiceImplementation>(); 
}); 
+1

Gracias @Obalix, eso es sin duda una solución mejor que la mía! –

Cuestiones relacionadas