基本クラスで定義された依存プロパティがあり、その派生クラスのコンストラクター内で使用しようとしていますが、機能しません。プロパティが null として表示されます。Unity は、container.Resolve(); でインスタンスを解決した後に依存プロパティを解決します。
私が持っている 1 つの代替手段は、IUnityContainer パラメーターを MyViewModel クラス コンストラクターに追加し、ILogger プロパティ my self を次のように設定することです。
public MyViewModel(IUnityContainer container)
{
Logger = container.Resolve<ILogger>();
}
編集: @ Wiktor_Zychla による別の提案は、コンストラクターによって注入されたパラメーターを次のように渡すことです。
public MyViewModel(ILogger _logger)
{
Logger = _logger;
}
これはうまくいくように見えますが、派生したすべてのViewModelに対してそれを行う必要があります..
しかし、基本クラスで注釈付きの ILogger 依存関係を使用していません。以下の私のクラスのサンプルを参照してください。問題は、どの代替案があるか、または何が間違っているかです。
ありがとう!
次のような ViewModel 基本クラスがあります。
public abstract class ViewModelBase
{
[Dependency]
public ILogger Logger { get; set; }
....
}
それから私はそれを派生させるクラスを持っています:
public class MyViewModel : ViewModelBase
{
public MyViewModel()
{
//I want to use my dependent property in constructor, but doesn't
Logger.Error("PRINT AN ERROR");
}
}
そして、私のアプリケーション エントリ ポイントでは、ILogger をシングルトンとして登録し、MyViewModel クラスを登録しています。
container.RegisterType<ILogger, MyAppLogger>(new ContainerControlledLifetimeManager());
container.RegisterType<MyViewModel>();