我有以下代碼:如何註冊一個具有`Func <>`作爲參數的類?
_container = new UnityContainer();
_container.RegisterType<IDownloader, Downloader>();
_container.RegisterType<INewObject, NewObject>();
_container.RegisterType<SearchViewModel>();
SearchViewModel
類構造器注入:
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;
}
}
問題:如何註冊SearchViewModel
有Fun<>
作爲參數?
_container.RegisterType<SearchViewModel>(new InjectionConstructor(DownloaderFactory()));
上面的代碼只工作不INewObject
。
目標:解決工廠InjectionConstructor
並自動解決INewObject, INewObject2, INewObject3
(如不帶參數:RegisterType<SearchViewModel>()
)。
可能嗎?也許替代?
爲什麼你不使用Setter注入INewObject參數? – daryal 2012-03-22 12:46:05
爲什麼要讓SearchViewModel取決於Func?這不是抽象的抽象嗎?我認爲你應該直接注入IDownloader接口。 IDownloader的具體實現可以封裝工廠行爲。在此處查看代碼示例:http://stackoverflow.com/questions/9757953/can-any-of-existing-ioc-containers-create-the-lazy-proxy-classes-dynamically –
2012-03-22 15:30:45