私は次のコードを持っている:コンストラクタ・インジェクションと`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;
}
}
に質問:パラメータとしてFun<>
を持ってSearchViewModel
を登録する方法を?
_container.RegisterType<SearchViewModel>(new InjectionConstructor(DownloaderFactory()));
上記のコードはINewObject
なしでのみ動作します。
目標:解決InjectionConstructor
と工場と自動的INewObject, INewObject2, INewObject3
を解決(のようなパラメータなし:RegisterType<SearchViewModel>()
)。
それは可能ですか?多分交代ですか?
public interface IDownloaderFactory
{
IDownloader Create();
}
その後、あなたは、単にインスタンスを解決するために、再度コンテナを使用して工場を表現するクラスを作成します。
なぜINewObjectパラメータにSetter注入を使用しないのですか? – daryal
SearchViewModelをFuncに依存させる理由を教えてください。それは漏れの抽象ではありませんか?私はあなたが直接IDownloaderのインターフェイスを注入すべきだと思う。 IDownloaderの具体的な実装は、工場の動作をカプセル化することができます。ここのコードサンプルを参照してください:http://stackoverflow.com/questions/9757953/can-any-of-existing-ioc-containers-create-the-lazy-proxy-classes-dynamically –