Todos nuestros informes se crean a partir de gráficos de objetos que se traducen de nuestros objetos de dominio. Para habilitar esto, tenemos una clase Translator para cada informe, y hemos estado usando Dependency Injection para pasar dependencias.Dependency Injection para objetos que requieren parámetros
Esto funcionó muy bien, y le dió buenos clases estructuradas como esto:
public class CheckTranslator : ICheckTranslator
{
public CheckTranslator (IEmployeeService empSvc
, IPaycheckService paySvc)
{
_empSvc = empSvc;
_paySvc = paySvc;
}
public Check CreateCheck()
{
//do the translation...
}
}
Sin embargo, en algunos casos, la asignación tiene muchas diferentes opciones de agrupación. Como resultado, el c-tor se convertiría en una mezcla de dependencias de clase y parámetros.
public class CheckTranslator : ICheckTranslator
{
public CheckTranslator (IEmployeeService empSvc
, IPaycheckService paySvc
, bool doTranslateStubData
, bool doAttachLogo)
{
_empSvc = empSvc;
_paySvc = paySvc;
_doTranslateStubData = doTranslateStubData;
_doAttachLogo = doAttachLogo;
}
public Check CreateCheck()
{
//do the translation...
}
}
Ahora, todavía podemos probarlo, pero ya no funciona realmente con un contenedor IoC, al menos de una manera limpia. Además, ya no podemos llamar a CreateCheck dos veces si la configuración es diferente para cada control.
Aunque reconozco que es un problema, no necesariamente veo la solución correcta. Parece un tanto extraño crear una fábrica para cada clase ... ¿o es esta la mejor manera?
¿Puede explicar "ya no funciona realmente con un contenedor IoC"? ¿Qué contenedor estás usando? –
De alguna manera no logro comprender las maravillas de la inyección de dependencia y por qué es incluso un patrón con su propio nombre. ¿Qué te impide convertir los parámetros de bool en propiedades? –
@Hamish: son parámetros de constructor porque son obligatorios. Al tenerlos en el constructor se impone que estén explícitamente establecidos antes de usar el componente. –