我正在围绕autofac编写一个适配器,需要提供一个实现:
T ResolveSingleton<T>()
当且仅当该类型使用单例生存期注册时,此方法才会返回实例,否则会抛出错误。
我是autofac的新手,想知道是否有办法在容器中查询某个类型的注册生命周期?
谢谢!
答案 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();
}