예외가 발생하면 부모 또는 다른 사람에게 해결 방법을 전달 하시겠습니까?처분 될 때 컨테이너는 어떻게 행동해야합니까?
내가 가장 좋아하는 컨테이너 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();
}
내가이 주위를 세 가지 해결 방법을 알고이 코드 내 문제를 해결해야 그 부모 해상도를 통과해야한다고 생각하지만, 그들은 모두
- 가 용기를 폐기 할뿐만 아니라 다르게 보일 - 이것은 내가 현재하고있는 일이지만, 그게 바로 오토 팩을 행복하게 만드는 것입니다.
- 게으른 것을 명시 적으로 등록하는 것입니다. - 무엇이 해결 될지조차 모르겠습니다.
- 처분에 대한 소유권을가집니다. m은 좋지 않지만 개체를 그런 방식으로 사용하지 않으므로 다시 한번 해결 방법처럼 보입니다. 또한, Autofac에 평생 범위의 요점은 그게 수명 포함 된 인스턴스의을 제어하는
안녕하세요 리카르드입니다. 첫 번째 해결책은 컨테이너를 처분하지 않고, 더 많은 정보없이 올바른 방법으로 들립니다. 인스턴스를 폐기하지 않으려면 왜 컨테이너를 처분해야합니까? 피터 (Peter)가 지적한 것처럼, 그것은 Container.Dispose()의 유일한 목적이다. 건배! –
분명히 뭔가 잘못 된 것처럼 느껴집니다. 이 경우 범위를 모든 종속성을 수집하여 해결하고 동작을 설정하는 구성 지점으로 사용합니다. 이 시점에서 컨테이너는 그 목적을 달성했습니다. 의존성을 기반으로 그래프로부터 모든 인스턴스를 해결했습니다. 나는 그것을 더 이상 사용하지 않는다. 해당 인스턴스의 동작이 해당 수명에 종속되지 않도록하고 싶습니다. 그래서 나는 그것을 처분하지 않음으로써 범위를 유출하고있는 것처럼 느낍니다. 그리고 분명히 공장과 게으름은 범위 수명에 달려 있습니다. 결론 : 디자인이 잘못되었다고 생각합니다. –
아마도 시나리오에 맞는 대체 구성 메커니즘이 필요할까요? 범위와 같은 소리는 잘못 사용하는 것이지만 일부 기능이 필요합니다. 구성 요소의 가시성을 제어하는 무언가를 찾고 있습니까? 데이터를 가져 주셔서 감사합니다! –