我想用Ninject绑定装饰类 .

public interface ICommandBus{ Send<T>(T command);}

// This is my first CommandBus class I will decorate this.

public class CommandBus: ICommandBus { 
    public void send(){ //handle commands... }
}

我创建了一个CommandBusDecorator

public abstract class CommandBusDecorator: ICommandBus
{
    private readonly ICommandBus commandBus;

    protected CommandBusDecorator(ICommandBus commandBus)
    {
        this.commandBus = commandBus;
    }

    public virtual void Send<T>(T command)
    {
        commandBus.SendCommand(command);
    }
}

还有一个装饰类可以应用一些东西 .

public class DecoratedFirstCommandBus: CommandBusDecorator{ .... }

我想用Ninject绑定依赖项,但Ninject不包含装饰器实现 .

Kernel.Bind<ICommandBus>().To<CommandBusDecorator>();
Kernel.Bind<ICommandBus>().To<CommandBus>();
Kernel.Bind<ICommandBus>().To<CommandBus>()
            .WhenInjectedInto<DecoratedFirstCommandBus>();

但是发生了错误:

“ExceptionMessage”:“尝试创建'ValuesController'类型的控制器时发生错误 . 确保控制器具有无参数的公共构造函数 . ”

值控制器只接受一个构造函数,

public class ValuesController : ApiController
{
    private ICommandBus commandBus;

    public ValuesController(ICommandBus commandBus)
    {
        this.commandBus = commandBus;
    }
}

如果我只使用一个绑定: Kernel.Bind<ICommandBus>().To<CommandBus>(); 应用程序正在运行 .