【发布时间】:2017-01-25 16:21:00
【问题描述】:
如果我将 Lazy 放入对象的构造函数中,并且 X 未在容器中注册,则会出现依赖解析异常。
为什么我会收到此异常?我不喜欢它,因为我不能在运行时选择组件。示例用例:
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());
}
}
为此,我需要注册两个组件 A 和 B。即使 B 从未使用过,我的程序也会失败。我希望 B 是可选的,并且仍然由 autofac 管理。
如果我有组件列表并且只希望使用一个组件,这将是一个更大的问题。例如:
class Controller
{
Controller(IEnumerable<Component> components) { /* (...) */ }
IActionResult Get()
{
return components.First(n => n.Name == configuredComponent).Execute();
}
}
我不再收到异常是没有注册的东西,但是一切都被构建了。使用起来也很尴尬。
【问题讨论】:
标签: c# autofac lazy-initialization