Aşağıdaki kod var: Yapıcı enjeksiyonu ileParametre olarak `Func <>` olan bir sınıf nasıl kaydedilir?
_container = new UnityContainer();
_container.RegisterType<IDownloader, Downloader>();
_container.RegisterType<INewObject, NewObject>();
_container.RegisterType<SearchViewModel>();
SearchViewModel
sınıfı:
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;
}
}
soru: nasıl parametre olarak Fun<>
sahiptir SearchViewModel
kayıt?
_container.RegisterType<SearchViewModel>(new InjectionConstructor(DownloaderFactory()));
Yukarıdaki kod sadece INewObject
olmadan çalışır.
hedefi: Çöz InjectionConstructor
ile fabrika ve otomatik INewObject, INewObject2, INewObject3
çözmek (gibi parametreler olmadan: RegisterType<SearchViewModel>()
).
Mümkün mü? Belki de alternatifler?
public interface IDownloaderFactory
{
IDownloader Create();
}
Sonra sadece örneklerini çözmek için tekrar kabı kullanan fabrikayı temsil edecek bir sınıf oluşturmak
:
Neden INewObject parametreleri için Setter enjeksiyonu kullanmıyorsunuz? – daryal
Neden SearchViewModel'i Func'a bağımlı hale getiriyorsunuz? Sızan soyutlama değil mi? IDownloader arayüzünü doğrudan enjekte etmeniz gerektiğini düşünüyorum. IDownloader'ın beton uygulaması fabrika davranışını kapsülleyebilir. Buradaki kod örneğine bakın: http://stackoverflow.com/questions/9757953/can-any-of-existing-ioc-containers-create-the-lazy-proxy-classes-dynamically –