2013-01-17 41 views
4

目前,我有下面的代码安装程序:在城堡注册泛型类型温莎

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

我想改变这个注册,这样它会自动解决任何类型的,我送的,而不是Unit

如何更改我的注册以实现此目的?

+0

你可以使用仿制药,或者是要解决不知道,直到运行时类型? – Gabe

+0

它可以肯定是通用的,所有的基本类型'BaseEntity' – shenku

回答

0

如果你知道你的类型在编译时,你可以注册一个通用函数:

void Register<T>() 
{ 
    container.Register(Component.For<EntityListResolver<T>>() 
      .ImplementedBy<EntityListResolver<T>>()); 
    container.Register(Component.For<EntityResolver<T>>() 
      .ImplementedBy<EntityResolver<T>>()); 
} 

然后只需调用Register<Unit>();或者任何一种你需要的。

+0

如果你不知道编译时的类型? – Kurren

+0

@Kurren:你可以使用Reflection来获得对'Register '的引用,专门用于任何你想要的类型。 – Gabe

5

您可以使用开放仿制药如:

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