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
,然后处置该对象)。
我想为 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
,然后处置该对象)。