No estoy seguro si esto es posible o no.¿Puedo usar la instalación de fábrica tipada para devolver la implementación según el parámetro (enum)?
Necesito devolver la implementación correcta de un servicio basado en un valor enum. Por lo que la aplicación codificado a mano sería algo como:
public enum MyEnum
{
One,
Two
}
public class MyFactory
{
public ITypeIWantToCreate Create(MyEnum type)
{
switch (type)
{
case MyEnum.One
return new TypeIWantToCreate1();
break;
case MyEnum.Two
return new TypeIWantToCreate2();
break;
default:
return null;
}
}
}
Las implementaciones que se devuelven tienen dependencias adicionales que tendrán que ser inyectado a través del contenedor, por lo que una fábrica de enrollado a mano no funcionará.
¿Es esto posible y, de ser así, cómo sería el registro?
¿Qué hay de malo en registrar esa fábrica en su contenedor, y en lugar de hacer 'new Type1', simplemente devolver la llamada al contenedor? – Steven
No quiero resolver directamente desde el contenedor: no tendré acceso al contenedor en este punto del código. –
Haga que la parte de fábrica de [Composition Root] (http://blog.ploeh.dk/2011/07/28/CompositionRoot.aspx) de su aplicación (y permita que dependa de una interfaz 'IMyFactroy' que es parte de la aplicación). En ese caso, está bien acceder al contenedor ([this is * not * the Service Locator anti-pattern] (http://blog.ploeh.dk/2011/08/25/ServiceLocatorRolesVsMechanics.aspx)). Simplemente inyecte el contenedor en el constructor de la fábrica y estará bien. – Steven