在Simple Injector中使用通用参数注册通用类型

时间:2019-07-02 19:08:30

标签: generics types simple-injector registering

我想注册几个具有通用参数的接口。这是代码示例:

container.Register(
    typeof(IDataMerger<OriginalObject, Response<MergeObjectA>>), 
    typeof(DataMerger<MergeObjectA>));

除了为每个合并对象进行新注册之外,最好的方法是什么?

我尝试使用类似于以下代码的代码,但出现错误。

container.RegisterConditional(
    typeof(IDataMerger<,>),
    typeof(DataMerger<>).MakeGenericType(typeof(ConsumerObject<,>)
        .GetGenericArguments()[1]), 
    c => c.Consumer?.ImplementationType != null
        && c.Consumer.ImplementationType.GetGenericArguments().Length == 2
        && c.Consumer.ImplementationType
              .GetGenericArguments()[0] == typeof(OriginalObject));

我们将不胜感激。

1 个答案:

答案 0 :(得分:3)

The documentation显示了演示如何执行此操作的示例。

假设以下定义:

interface IDataMerger<TRequest, TResponse> { }

class DataMerger<T> : IDataMerger<OriginalObject, Response<T>> { }

您可以进行以下注册:

container.Register(typeof(IDataMerger<,>), typeof(DataMerger<>));
相关问题