小编Mat*_*ler的帖子

简单注入器 - 使用相同泛型类型的另一个依赖项注册装饰器

我想我在Simple Injector中偶然发现了一个怪癖RegisterDecorator().它甚至出现在最近的2.5.0中.我有一种情况,我想装饰一个封闭的泛型类型,例如ICommandHandler<MessageCommand>,装饰器(通过构造函数注入)一个类型的内部处理程序ICommandHandler<MessageCommand>,但也有另一种类型的处理程序ICommandHandler<LogCommand>.尽管这些命令处理程序类型是不同的,但是当我调用RegisterDecorator这样的装饰器类型时,SimpleInjector似乎会混淆并引发异常:

ArgumentException:为了使容器能够使用MessageLogger作为装饰器,其构造函数必须包含一个类型ICommandHandler<MessageCommand>(或Func<ICommandHandler<MessageCommand>>)的参数- 即正在装饰的实例的类型.ICommandHandler<MessageCommand>在MessageLogger类的构造函数中多次定义参数类型.

...即使装饰者显然只有一个ICommandHandler<MessageCommand>参数.

以下是抛出异常的完整工作示例:

public interface ICommandHandler<T>
{
    void Execute(T command);
}

public class LogCommand
{
    public string LogMessage { get; set; }
    public DateTime Time { get; set; }
}

public class Logger : ICommandHandler<LogCommand>
{
    public void Execute(LogCommand command)
    {
        Debug.WriteLine(string.Format("Message \"{0}\" sent at {1}",
            command.LogMessage, command.Time));
    }
}


public class MessageCommand
{
    public string Message { get; …
Run Code Online (Sandbox Code Playgroud)

.net c# generics dependency-injection simple-injector

7
推荐指数
1
解决办法
4605
查看次数