在Castle Windsor中注册泛型类型

4

目前我有一个安装程序,其中包含以下代码:

container.Register(Component.For<EntityListResolver<Unit>>()
         .ImplementedBy<EntityListResolver<Unit>>());
container.Register(Component.For<EntityResolver<Unit>>()
         .ImplementedBy<EntityResolver<Unit>>());

我想更改这个注册信息,以便它可以自动解析发送的任何类型,而不是 Unit
如何更改我的注册信息以实现此目的?

你可以使用泛型吗?还是你想要解析的类型直到运行时才知道? - Gabe
它肯定可以是通用的,所有基类型为 BaseEntity - shenku
2个回答

5
您可以使用开放式泛型,例如:
container.Register(Component.For(typeof(EntityListResolver<>))()
         .ImplementedBy(typeof(EntityListResolver<>))());

0
如果您在编译时知道您的类型,您可以在一个通用函数中进行注册:
void Register<T>()
{
    container.Register(Component.For<EntityListResolver<T>>()
             .ImplementedBy<EntityListResolver<T>>());
    container.Register(Component.For<EntityResolver<T>>()
             .ImplementedBy<EntityResolver<T>>());
}

然后只需调用Register<Unit>()或您需要的任何类型。

如果您在编译时不知道类型呢? - Kurren
@Kurren:您可以使用反射来获取对特定类型进行了专门化的 Register<T> 的引用。 - Gabe

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接