オブジェクトのコンストラクタにLazyを入れ、Xがコンテナに登録されていないと、依存性解決の例外が発生します。autofacオプション/遅延依存関係
なぜこの例外が発生しますか?実行時にコンポーネントを選択できないため、私はそれを嫌いです。例のユースケース:
class Controller
{
public Controller(Lazy<A> a, Lazy<B> b) { /* (...) */ }
Lazy<A> a;
Lazy<B> b;
public IActionResult Get(){
if(someConfig)
return Json(a.Value.Execute());
else
return Json(b.Value.Execute());
}
}
私はB.私のプログラムは、Bを使ったことがない場合であっても失敗し、両方のコンポーネントを登録する必要があり、そうします。私はBをオプションにしておきたいが、それでもオートファックで管理している。
コンポーネントのリストがあり、1つしか使用しない場合は、これはさらに大きな問題です。例:
class Controller
{
Controller(IEnumerable<Component> components) { /* (...) */ }
IActionResult Get()
{
return components.First(n => n.Name == configuredComponent).Execute();
}
}
何も登録されていないことはもうなくなりましたが、それでもすべてが構築されています。また、使用するのは面倒です。あなたはLazy<T>
コンポーネントへの参照を追加した場合