我想我在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)