C# 如何使用Castle Windsor-Fluent接口注册通用接口?

C# 如何使用Castle Windsor-Fluent接口注册通用接口?,c#,castle-windsor,ioc-container,castle,fluent-interface,C#,Castle Windsor,Ioc Container,Castle,Fluent Interface,Castle Windsor刚刚推出了一个流畅的界面,用于注册组件,以替代在配置文件中使用XML。如何使用这个流畅的界面注册一个通用界面 举例来说,我有: public interface IFoo<T,U> { public T IToo(); public U ISeeU(); } 我如何继续向该网站注册?执行非泛型接口的过程不起作用 像这样的事 container.Register(AllTypes.FromAssemblyContaining&

Castle Windsor刚刚推出了一个流畅的界面,用于注册组件,以替代在配置文件中使用XML。如何使用这个流畅的界面注册一个通用界面

举例来说,我有:

public interface IFoo<T,U>
{    
  public T IToo();   
  public U ISeeU(); 
}
我如何继续向该网站注册?执行非泛型接口的过程不起作用

像这样的事

   container.Register(AllTypes.FromAssemblyContaining<YourClass>()
        .BasedOn(typeof(IFoo<,>))
        .WithService.AllInterfaces()
        .Configure(c => c.LifeStyle.Transient));
container.Register(AllTypes.FromAssemblyContaining()
.BasedOn(类型(IFoo))
.WithService.AllInterfaces()
.Configure(c=>c.lifesture.Transient));
接口

 public interface IFoo<T, U>
{
    T IToo();
    U ISeeU();
}
公共接口IFoo
{
IToo();
U ISeeU();
}

您的问题中不清楚您是否需要将open generic
IFoo
接口映射到一个或多个实现该接口的封闭版本(批注册)的实现,或者您希望将open generic接口映射到open generic实现

Danyolgiax举了一个批量注册的例子。将开放泛型接口映射到开放泛型实现,使您能够请求该接口的关闭版本并返回指定实现的关闭版本。映射开放泛型类型的注册通常如下所示:

container.Register(Component
    .For(typeof(IFoo<,>))
    .ImplementedBy(typeof(Foo<,>)));
container.Register(组件
.For(类型(IFoo))
。由(类型(Foo))实施;
您可以通过以下方式解决此问题:

var foo1 = container.Resolve<IFoo<int, double>>();
object foo2 = container.Resolve(typeof(IFoo<string, object>));
var foo1=container.Resolve();
object foo2=container.Resolve(typeof(IFoo));

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

谢谢您的回答。什么是“事件存储库”?@Phil:某个类。您可以编写自己的查询/安装程序。这一点很好。我一直在寻找解决办法;我只是需要它工作。我们的想法是现在就开始工作,如果需要的话,以后再修改。这就是为什么我没有打开这个方法。谢谢你的洞察力。请给我一个如何通过温莎解决这个问题的例子。当我尝试时,问题是Foo本身不是泛型的,所以我得到了这样一个异常=>System.InvalidOperationException:Fooing.Foo不是泛型类型定义。MakeGenericType只能在type.IsGenericTypeDefinition为true的类型上调用。
var foo1 = container.Resolve<IFoo<int, double>>();
object foo2 = container.Resolve(typeof(IFoo<string, object>));