如何使用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(...);

如何继续注册?执行非通用接口的过程不起作用。

如何使用CastleWindsor-Fluent接口注册通用接口

有点像这样吗?

   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>));

正如您所看到的,您可以解析开放通用接口的任何关闭版本。