如何简化同一开放式通用实现的大量封闭通用版本的注册?

时间:2013-07-22 19:38:39

标签: c# .net castle-windsor ioc-container fluent-interface

是否有流利的方式撰写以下内容:

var someTypes = GetType()
    .Assembly
    .GetTypes()
    .Where(x => someFilter == true);

foreach(var someType in someTypes)
{
    var genericInterface = typeof(IFoo<>).MakeGenericType(someType);

    var genericImplementation = typeof(Foo<>).MakeGenericType(someType);

    container.Register(
       Component.For(genericInterface)
            .ImplementedBy(genericImplementation));
}

2 个答案:

答案 0 :(得分:3)

IGenericServiceStrategy就是你所追求的(除了@maxlego所说的,这是正确的)

See this了解详情和示例。

答案 1 :(得分:2)

以下应该

container.Register(
    Component.For(typeof(IFoo<>))
      .ImplementedBy(typeof(Foo<>))
);