Autofac检查正在解决的类型的生命周期范围

时间:2014-04-14 18:14:55

标签: autofac

我正在围绕autofac编写一个适配器,需要提供一个实现:

T ResolveSingleton<T>()

当且仅当该类型使用单例生存期注册时,此方法才会返回实例,否则会抛出错误。

我是autofac的新手,想知道是否有办法在容器中查询某个类型的注册生命周期?

谢谢!

1 个答案:

答案 0 :(得分:3)

查看Autofac源代码,您可以看到SingleInstance的实现是这样的:

    public IRegistrationBuilder<TLimit, TActivatorData, TRegistrationStyle> SingleInstance()
    {
        RegistrationData.Sharing = InstanceSharing.Shared;
        RegistrationData.Lifetime = new RootScopeLifetime();
        return this;
    }

因此,您必须检查ComponentRegistry是否符合这些品质的注册。

    public T ResolveSingleton<T>()
    {
        IComponentRegistration reg;
        if (_context.ComponentRegistry.TryGetRegistration(new TypedService(typeof (T)), out reg))
        {
            if (reg.Lifetime is RootScopeLifetime && reg.Sharing == InstanceSharing.Shared)
                return (T) _context.ResolveComponent(reg, Enumerable.Empty<Parameter>());
        }

        throw new Exception();
    }