Должно ли оно генерировать исключение, передавать разрешение своему родителю или что-то еще?
Мой любимый контейнер 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();
}
Я знаю три обходных пути, но все они кажутся просто неправильными
- не утилизировать контейнер - это то, чем я сейчас занимаюсь, но это просто для того, чтобы Аутофак был счастлив
- явная регистрация ленивых - кажется, просто неправильно, и я даже не знаю, что будет решено
- взять на себя ответственность за распоряжение - это не так уж плохо, но я не использую объект таким образом, так что снова это выглядит как обходной путь. Кроме того, в Autofac он вводит зависимость, что не очень приятно