У меня есть два класса, один вводится другим: -
public class A : IClassA
{
public A(IClassB b)
{
...
}
}
public class B : IClassB, IDisposable
{
...
}
И они зарегистрированы так: -
container.Register(Component.For<IClassA>().ImplementedBy<A>().LifeStyle.Singleton);
container.Register(Component.For<IClassB>().ImplementedBy<B>().LifeStyle.Transient);
Когда я закрываю свою заявку, я звоню Container.Dispose()
. В этот момент я обнаружил, что метод Dispose()
класса "B" вызывается дважды. Если я зарегистрирую класс "B" как singleton , он будет вызван только один раз. Почему это?
Я использую Castle Windsor v3.3.0.
Вот стеки вызовов из двух вызовов Dispose (), если это помогает (я обрезал их в точке, где я вызываю Container.Dispose()
).
Первый вызов Dispose ():
Castle.Windsor.dll! Castle.MicroKernel.LifecycleConcerns.DisposalConcern.Apply (модель Castle.Core.ComponentModel, компонент объекта) Неизвестно
Castle.Windsor.dll! Castle.MicroKernel.ComponentActivator.AbstractComponentActivator.ApplyConcerns (System.Collections.Generic.IEnumerable шаги, экземпляр объекта) Неизвестно
Castle.Windsor.dll! Castle.MicroKernel.ComponentActivator.AbstractComponentActivator.ApplyDecommissionConcerns (экземпляр объекта) Неизвестно
Castle.Windsor.dll! Castle.MicroKernel.ComponentActivator.DefaultComponentActivator.InternalDestroy (экземпляр объекта) Неизвестно
Castle.Windsor.dll! Castle.MicroKernel.ComponentActivator.AbstractComponentActivator.Destroy (экземпляр объекта) Неизвестно
Castle.Windsor.dll! Castle.MicroKernel.Lifestyle.AbstractLifestyleManager.Release (экземпляр объекта) Неизвестно
Castle.Windsor.dll! Castle.MicroKernel.Handlers.DefaultHandler.ReleaseCore (Заметка.MicroKernel. Бремя нагрузки) Неизвестно
Castle.Windsor.dll! Castle.MicroKernel.Handlers.AbstractHandler.Release (Castle.MicroKernel. Бремя нагрузки) Неизвестно
Castle.Windsor.dll! Castle.MicroKernel.Burden.Release () Неизвестный
Castle.Windsor.dll! Castle.MicroKernel.Releasers.LifecycledComponentsReleasePolicy.Dispose () Неизвестно
Castle.Windsor.dll! Castle.Facilities.TypedFactory.Internal.TypedFactoryInterceptor.Dispose () Неизвестно
Castle.Windsor.dll! Castle.MicroKernel.LifecycleConcerns.DisposalConcern.Apply (модель Castle.Core.ComponentModel, компонент объекта) Неизвестно
Castle.Windsor.dll! Castle.MicroKernel.ComponentActivator.AbstractComponentActivator.ApplyConcerns (System.Collections.Generic.IEnumerable шаги, экземпляр объекта) Неизвестно
Castle.Windsor.dll! Castle.MicroKernel.ComponentActivator.AbstractComponentActivator.ApplyDecommissionConcerns (экземпляр объекта) Неизвестно
Castle.Windsor.dll! Castle.MicroKernel.ComponentActivator.DefaultComponentActivator.InternalDestroy (экземпляр объекта) Неизвестно
Castle.Windsor.dll! Castle.MicroKernel.ComponentActivator.AbstractComponentActivator.Destroy (экземпляр объекта) Неизвестно
Castle.Windsor.dll! Castle.MicroKernel.Lifestyle.AbstractLifestyleManager.Release (экземпляр объекта) Неизвестно
Castle.Windsor.dll! Castle.MicroKernel.Handlers.DefaultHandler.ReleaseCore (Заметка.MicroKernel. Бремя нагрузки) Неизвестно
Castle.Windsor.dll! Castle.MicroKernel.Handlers.AbstractHandler.Release (Castle.MicroKernel. Бремя нагрузки) Неизвестно
Castle.Windsor.dll! Castle.MicroKernel.Burden.Release () Неизвестный
Castle.Windsor.dll! Castle.MicroKernel.Releasers.LifecycledComponentsReleasePolicy.Dispose () Неизвестно
Castle.Windsor.dll! Castle.MicroKernel.DefaultKernel.DisposeComponentsInstancesWithinTracker () Неизвестно
Castle.Windsor.dll! Castle.MicroKernel.DefaultKernel.Dispose () Неизвестно
Castle.Windsor.dll! Castle.Windsor.WindsorContainer.Dispose () Неизвестно
Второй вызов Dispose ():
Castle.Windsor.dll! Castle.MicroKernel.LifecycleConcerns.DisposalConcern.Apply (модель Castle.Core.ComponentModel, компонент объекта) Неизвестно
Castle.Windsor.dll! Castle.MicroKernel.ComponentActivator.AbstractComponentActivator.ApplyConcerns (System.Collections.Generic.IEnumerable шаги, экземпляр объекта) НеизвестноCastle.Windsor.dll! Castle.MicroKernel.ComponentActivator.AbstractComponentActivator.ApplyDecommissionConcerns (экземпляр объекта) Неизвестно
Castle.Windsor.dll! Castle.MicroKernel.ComponentActivator.DefaultComponentActivator.InternalDestroy (экземпляр объекта) Неизвестно
Castle.Windsor.dll! Castle.MicroKernel.ComponentActivator.AbstractComponentActivator.Destroy (экземпляр объекта) Неизвестно
Castle.Windsor.dll! Castle.MicroKernel.Lifestyle.AbstractLifestyleManager.Release (экземпляр объекта) Неизвестно
Castle.Windsor.dll! Castle.MicroKernel.Handlers.DefaultHandler.ReleaseCore (Заметка.MicroKernel. Бремя нагрузки) Неизвестно
Castle.Windsor.dll! Castle.MicroKernel.Handlers.AbstractHandler.Release (Castle.MicroKernel. Бремя нагрузки) Неизвестно
Castle.Windsor.dll! Castle.MicroKernel.Burden.Release () Неизвестный
Castle.Windsor.dll! Castle.MicroKernel.Burden.Release.AnonymousMethod__0 (Castle.MicroKernel.Burden c) Неизвестный
mscorlib.dll! System.Collections.Generic.List.ForEach (действие System.Action) Неизвестно
Castle.Windsor.dll! Castle.MicroKernel.Burden.Release () Неизвестный
Castle.Windsor.dll! Castle.MicroKernel.Lifestyle.SingletonLifestyleManager.Dispose () Неизвестно
Castle.Windsor.dll! Castle.MicroKernel.Handlers.DefaultHandler.Dispose () Неизвестно
Castle.Windsor.dll! Castle.MicroKernel.DefaultKernel.DisposeHandler (обработчик Castle.MicroKernel.IHandler) Неизвестный
Castle.Windsor.dll! Castle.MicroKernel.DefaultKernel.DisposeHandlers () Неизвестно
Castle.Windsor.dll! Castle.MicroKernel.DefaultKernel.Dispose () Неизвестно
Castle.Windsor.dll! Castle.Windsor.WindsorContainer.Dispose () Неизвестно