1
私は多くのアトラクションを試しましたが、運はありませんでした。 IWindowServiceを解決するにはどうすればよいですか?1つの汎用コンストラクタパラメータを使用して型を登録/解決する方法
これは私が持っているものです。
var c = new UnityContainer();
c.RegisterType<IvmMain, vmMain>("mvm");
c.RegisterType<IWindow, MainWindow>("mw");
c.RegisterType(typeof(IWindowService<IvmMain>), typeof(WindowService<vmMain>),"win",
new InjectionConstructor(new ResolvedParameter<IWindow>("mw")),
new InjectionConstructor(new ResolvedParameter<IvmMain>("mvm")));
ウィンドウサービスの実装:
public class WindowService<TViewModel> : IWindowService<TViewModel>
{
readonly Window _win;
TViewModel _vm;
public WindowService(IWindow win, TViewModel vm)
{
_vm = vm;
_win = win as Window;
_win.DataContext = vm;
}
エラー: WindowServiceパラメータ(IWindowを取るコンストラクタを持たないタイプ)。
ありがとう! – Legends
もう1つの質問(私はこれに対して新しいQを開くことができます): 私はコンストラクタインジェクションを使用するので、私は明示的にresolveメソッドを使用しません。 別の 'container.RegisterType();'があり、これを別のクラスのconstrtuctorパラメータとして使用したい場合は、 そのときのアプローチは何ですか? 名前付き登録が必要です。[依存関係]属性を使わずに –
Legends
あなたは本当に解決したいタイプを知る必要があります。コンストラクタインジェクションかどうか。これを行うにはいくつかの方法があります。この答えを見てください。 http://stackoverflow.com/questions/38475047/breaking-solid-principles-in-multiple-implementation-of-an-interface/38475681#38475681 – smoksnes