.net 如何默认Unity Lifetime Manager

wqsoz72f  于 2023-03-24  发布在  .NET
关注(0)|答案(1)|浏览(101)

我正在更新一个使用Unity 3.5进行依赖注入的遗留代码库。它使用自定义扩展来设置默认的LifetimeManager,与this stackflow question的方式大致相同。
然而,现在我们已经更新到最新的Unity 5.11,这不再起作用。特别是:

Context.Policies.Set<ILifetimePolicy>(lifetimeManager, new NamedTypeBuildKey(e.TypeTo, e.Name));

因为似乎Set()方法定义在Unity的后期版本中已经改变了,我不能确切地计算出它们应该如何使用。
在最新的Unity中应该如何做到这一点?

vnzz0bqm

vnzz0bqm1#

我认为没有必要再为生存期管理器设置Context策略,我们只需要在RegisterEventArgs上设置生存期管理器,沿着所示:

public class DefaultLifetimeManagerExtension : UnityContainerExtension
{
    private readonly LifetimeManager _lifetimeManager;

    public DefaultLifetimeManagerExtension(LifetimeManager lifetimeManager)
    {
        _lifetimeManager = lifetimeManager;
    }

    protected override void Initialize()
    {
        // Set the default lifetime manager for registrations
        Context.Registering += (sender, e) =>
        {
            if (e.LifetimeManager == null)
            {
                e.LifetimeManager = _lifetimeManager;
            }
        };
    }
}

相关问题