繁体   English   中英

你如何使用 Castle Windsor - Fluent Interface 来注册一个通用接口?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM