Ho il seguente codice:Come registrare una classe che ha `Func <>` come parametro?
_container = new UnityContainer();
_container.RegisterType<IDownloader, Downloader>();
_container.RegisterType<INewObject, NewObject>();
_container.RegisterType<SearchViewModel>();
SearchViewModel
classe con l'iniezione del costruttore:
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 domanda: Come registrareSearchViewModel
che ha Fun<>
come parametro?
_container.RegisterType<SearchViewModel>(new InjectionConstructor(DownloaderFactory()));
Il codice di cui sopra funziona solo senza INewObject
.
L'obiettivo: fabbrica Resolve con InjectionConstructor
e risolvere INewObject, INewObject2, INewObject3
automaticamente (come senza parametri: RegisterType<SearchViewModel>()
).
È possibile? Forse si alterna?
Perché non si utilizza l'iniezione di Setter per i parametri INewObject? – daryal
Perché rendere SearchViewModel dipendente da Func? Non è l'astrazione che perde? Penso che dovresti inserire direttamente l'interfaccia di IDownloader. L'implementazione concreta di IDownloader può incapsulare il comportamento di fabbrica. Guarda l'esempio del codice qui: http://stackoverflow.com/questions/9757953/can-any-of-existing-ioc-containers-create-the-lazy-proxy-classes-dynamically –