gpt4 book ai didi

c# - 指定多个泛型类型来实现

转载 作者:太空宇宙 更新时间:2023-11-03 13:19:48 27 4
gpt4 key购买 nike

给定以下服务结构:

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 相同的数量;有一种方法可以通过使用 Castle IGenericImplementationMatchingStrategy interface 将其包装在一个干净的实现中但是这个接口(interface)只允许你用一个签名关闭一个通用类型;您不能关闭具有多种类型的通用类型。

public class YourCustomGenericCloser: IGenericImplementationMatchingStrategy
{
public Type[] GetGenericArguments(ComponentModel model, CreationContext context)
{
if(context.RequestedType == typeof(IFoo))
{
return typeof(TheDefaultTypeToCloseAgainst);
}
return null;
}
}

我认为到目前为止,您的方法可能是针对基本接口(interface)注册具体泛型类型的更简单方法。

关于c# - 指定多个泛型类型来实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24755567/

27 4 0
文章推荐: c# - 使用平移和缩放计算正确的光标位置
文章推荐: java - 如何从 WifiP2pDeviceList 获取 wifi direct 设备名称
文章推荐: java - 如何获取其他设备的对端IP地址
文章推荐: c# - 在 BindingList 上运行 Clear() 方法导致 "Cross Thread"异常