tengo el siguiente código:¿Cómo registrar una clase que tiene `Func <>` como parámetro?
clase_container = new UnityContainer();
_container.RegisterType<IDownloader, Downloader>();
_container.RegisterType<INewObject, NewObject>();
_container.RegisterType<SearchViewModel>();
SearchViewModel
con la inyección de constructor:
class SearchViewModel
{
private readonly Func<IDownloader> _downloaderFactory;
private readonly INewObject _newObject;
private IDownloader _downloader;
public SearchViewModel(Func<IDownloader> downloaderFactory, INewObject newObject)
{
_downloaderFactory = downloaderFactory;
_newObject = newObject;
}
}
La pregunta: ¿Cómo registrarSearchViewModel
que tiene Fun<>
como parámetro?
_container.RegisterType<SearchViewModel>(new InjectionConstructor(DownloaderFactory()));
El código anterior funciona solo sin INewObject
.
El objetivo: fábrica se resuelven con InjectionConstructor
y resolver INewObject, INewObject2, INewObject3
automáticamente (como sin parámetros: RegisterType<SearchViewModel>()
).
¿Es posible? Quizás alternos?
¿Por qué no utilizas la inyección Setter para los parámetros de INewObject? – daryal
¿Por qué hace que SearchViewModel dependa de Func? ¿No es la abstracción con fugas? Creo que deberías inyectar directamente la interfaz de IDownloader. La implementación concreta de IDownloader puede encapsular el comportamiento de fábrica. Vea el ejemplo del código aquí: http://stackoverflow.com/questions/9757953/can-any-of-existing-ioc-containers-create-the-lazy-proxy-classes-dynamically –