为实现指定多个泛型类型
本文关键字:泛型类型 实现 | 更新日期: 2023-09-27 18:13:04
给定以下服务结构:
public interface IFoo
{
void Print();
}
public class Foo<T> : IFoo
{
private T _item;
public Foo(T item)
{
_item = item;
}
public void Print()
{
Console.WriteLine(_item);
}
}
是否有一种方法可以让我用多个类型注册Foo<T>
组件,而不是通过显式枚举它们?这是有效的,但我认为可能有一个更好的方法:
foreach (var t in myTypes)
{
container.Register(Component.For<IFoo>()
.ImplementedBy(typeof(Foo<>).MakeGenericType(new[] { t })));
}
您在foreach type
循环中所做的是将打开的通用组件的数量减少到与IFoo
相同的数量;有一种方法来包装这在一个干净的实现使用城堡IGenericImplementationMatchingStrategy
接口,但这个接口只允许你关闭一个泛型类型与一个签名;不能使用多个类型关闭泛型类型。
public class YourCustomGenericCloser: IGenericImplementationMatchingStrategy
{
public Type[] GetGenericArguments(ComponentModel model, CreationContext context)
{
if(context.RequestedType == typeof(IFoo))
{
return typeof(TheDefaultTypeToCloseAgainst);
}
return null;
}
}
我认为到目前为止,您的方法可能是针对基本接口注册具体泛型类型的更简单方法。