给定以下接口和类,在Autofac中是否有办法
- 为所有具有
ProviderAttribute
的类注册一个Provider<T>
,T
是此类的类型(想想注册开放泛型并使用Autofac的MakeGenericType()
解析它们)
将这些 - 注册的提供程序作为鼓卷
IEnumerable<IProviderBase>
注入到其他类的构造函数中
概述:
public class ProviderAttribute : Attribute { }
public interface IProviderBase
{
Type Type { get; }
}
public interface IProvider<T> : IProviderBase
{
DoSomething(T t);
}
public class Provider<T> : IProvider<T>
{
public Type Type
{
get { return typeof (T); }
}
public DoSomething(T t)
{
//...
}
}
我想出了一个粗略的解决方案:
var types = GetProviderTypes();
foreach (var type in types)
{
var t = typeof (Provider<>).MakeGenericType(type);
builder.RegisterType(t).As<IProviderBase>();
}