如何使用CastleWindsor-Fluent接口注册通用接口
本文关键字:接口 注册 CastleWindsor-Fluent 何使用 | 更新日期: 2023-09-27 17:58:21
Castle Windsor刚刚推出了一个Fluent接口,用于注册组件,作为在配置文件中使用XML的替代方案。如何使用此Fluent接口注册通用接口?
举例来说,我有:
public interface IFoo<T,U>
{
public T IToo();
public U ISeeU();
}
它是由一个名为Foo的类实现的。现在,如果我想注册这个,我会做一些类似。。。
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();
}
您的问题中不清楚是需要将开放通用IFoo<T,U>
接口映射到一个或多个实现,每个实现都实现该接口的封闭版本(批注册(,还是希望将开放通用接口映射到开放通用实现。
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>));
正如您所看到的,您可以解析开放通用接口的任何关闭版本。