我使用 C# 和 Autofac 4.9.4。我有一个 Autofac 模块,它连接到 IComponentRegistration.Activated 事件。它查找某些类的激活实例并将它们注册到某个管理器类中。当然,此注册应限于受影响对象的生命周期。因此模块需要知道对象何时被容器丢弃,然后从管理器中注销它。否则我会产生内存泄漏。当我向 autofac ContainerBuilder 注册一个类时,有一个 OnRelease-Method,但这不是正确的地方;我需要模块内的这样一个事件。
具体代码如下所示:
using Autofac;
using Autofac.Core;
namespace De.Gedat.Foundation.Bl.IoC
{
public class ResetManagerModule : Module
{
protected override void AttachToComponentRegistration(
IComponentRegistry componentRegistry,
IComponentRegistration registration)
{
registration.Activated += (sender, e) =>
RegisterToResetManager(e.Instance, e.Context);
registration.Released += ???
}
private void RegisterToResetManager(object instance, IComponentContext context)
{
// Every IAutoRegisteredResettable object created by IoC will be picked up:
var resettable = instance as IAutoRegisteredResettable;
if (resettable == null)
return;
// Get the singleton IResetManager...
var resetManager = context.Resolve<IResetManager>();
// ...and register the instance with it:
resetManager.RegisterInstance(resettable);
// ...and on resettable's end-of-lifetime we would have to call:
//resetManager.UnregisterInstance(resettable)
//...but not at this point when the instance has just been created!
}
}
}
当一个物体被丢弃时,我怎样才能引起注意?