是否应抛出异常,将解析传递给其父级或其他内容?
我最喜欢的容器Autofac引发了异常 - 这是我唯一不喜欢它的东西。 我认为它应该将解决方案传递给其父级,这应该通过此代码来解决我的问题
class LazyClass
{
public void DoSomething() { }
}
class SomeClass
{
public event EventHandler WatchOut = (s, ea) => { };
public void Start()
{
WatchOut(this, EventArgs.Empty);
}
}
class LazyInterceptor
{
Lazy<LazyClass> lazy;
public LazyInterceptor(Lazy<LazyClass> lazy)
{
this.lazy = lazy;
}
public void Register(SomeClass some)
{
some.WatchOut += (s, ea) => lazy.Value.DoSomething();
}
}
[TestMethod]
public void LazyAndEvents()
{
var builder = new ContainerBuilder();
builder.RegisterType<LazyClass>().SingleInstance();
var container = builder.Build();
var someClass = new SomeClass();
using (var inner = container.BeginLifetimeScope(cb =>
cb.RegisterType().SingleInstance()))
{
var interceptor = inner.Resolve();
interceptor.Register(someClass);
}
someClass.Start();
}
我知道有三种解决方法,但它们似乎都是错误的
答案 0 :(得分:4)
生命周期范围的重点是控制所包含实例的生存期。在Disposable模式的基础上,处理容器是一种清晰且完善的方式来释放由该容器管理的资源。因此,当处置生命周期范围时,您不应再依赖于从该生命周期范围中解析的实例。
所以我会说你在这里错误地使用Autofac。也许如果您解释了为什么要使用这样的范围,我们可以找出正确的用法。