[英]How to register open generic type by interface with Castle Windsor?
[英]How do you use Castle Windsor - Fluent Interface to register a generic interfaces?
Castle Windsor 刚刚推出了用于注册组件的 Fluent 界面,作为在配置文件中使用 XML 的替代方案。 如何使用这个 Fluent 接口注册一个通用接口?
为了说明,我有:
public interface IFoo<T,U>
{
public T IToo();
public U ISeeU();
}
这是由一些名为Foo的 class 实现的。 现在,如果我想注册这个,我会做类似的事情......
var _container = new WindsorContainer();
_container.Register(...);
我该如何进行注册? 执行非通用接口的过程不起作用。
有这样的吗?
container.Register(AllTypes.FromAssemblyContaining<YourClass>()
.BasedOn(typeof(IFoo<,>))
.WithService.AllInterfaces()
.Configure(c => c.LifeStyle.Transient));
界面
public interface IFoo<T, U>
{
T IToo();
U ISeeU();
}
您的问题不清楚您是否需要 map 开放通用IFoo<T,U>
接口一个或多个实现,每个实现都实现该接口的封闭版本(批量注册),或者您想要 map 开放通用接口开放的通用实现。
Danyolgiax 举了一个批量注册的例子。 将开放的通用接口映射到开放的通用实现,使您能够请求该接口的封闭版本并返回指定实现的封闭版本。 映射开放泛型类型的注册通常如下所示:
container.Register(Component
.For(typeof(IFoo<,>))
.ImplementedBy(typeof(Foo<,>)));
您可以按如下方式解决此问题:
var foo1 = container.Resolve<IFoo<int, double>>();
object foo2 = container.Resolve(typeof(IFoo<string, object>));
如您所见,您可以解析开放通用接口的任何封闭版本。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.