Builder Strategy 中的 LifetimeManager

LifetimeManager in Builder Strategy

我想为 Unity 3.5 版实现一个可处理的瞬态生命周期管理器。问题是我不知道如何访问 PostTearDown 中的 LifetimeManager 等。步骤 BuilderStrategy class。 context.Lifetime 在 Unity 2 中工作正常。

基本上我有以下几点:

Container = new UnityContainer();
Container.AddNewExtension<DisposableStrategyExtension>();
Container.RegisterType<ITest, Test>(new DisposingTransientLifetimeManager());


public class DisposingLifetimeStrategy : BuilderStrategy
    {
        public override void PreBuildUp(IBuilderContext context)
        {
            base.PreBuildUp(context);
            // context.Lifetime.Count == 0 here and in all other methods.
            // In version 2 of unity this is set.
        }
    // implement rest of methods, but context.Lifetime.Count is 0 in all of them too.


public class DisposingTransientLifetimeManager : LifetimeManager
    // implement abstract methods minimally

您可以从策略列表中获取生命周期管理器:

public class DisposingLifetimeStrategy : BuilderStrategy
{
    public override void PreBuildUp(IBuilderContext context)
    {
        ILifetimePolicy lifeTime = context.Policies.Get<ILifetimePolicy>(context.BuildKey);               
        base.PreBuildUp(context);
    }

    public override void PreTearDown(IBuilderContext context)
    {
        // Assumes registration name is null
        var buildKey = new NamedTypeBuildKey(context.Existing.GetType());
        ILifetimePolicy lifeTime = context.Policies.Get<ILifetimePolicy>(buildKey);
        base.PreTearDown(context);
    }
}

如果您正在调用 IUnityContainer.Teardown(obj),则 PreTearDown 和 PostTearDown 方法将不知道已解析对象的名称。只要存在默认(空)注册,这可能并不重要(因为我假设您只想将对象转换为 IDisposable,然后处置该对象)。