簡體   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