【问题标题】:Ninject convention based binding基于 Ninject 约定的绑定
【发布时间】:2011-01-31 21:42:35
【问题描述】:

再一次,我想我可能在这里遗漏了明显的东西。我希望按照约定进行自动绑定。我一直在研究 Ninject.extension.conventions 项目和程序集扫描器。

我有很多如下所示的行,我想自动绑定:

Bind<ICommandHandler<MyCommand>>().To<MyCommandHandler>();
Bind<ICommandHandler<MyOtherCommand>>().To<MyOtherCommandHander>();

我尝试了以下几种变体:

Kernal.Scan(x => {
    x.FromAssemblyContaining<MyCommand>();
    x.WhereTypeInheritsFrom(typeof(ICommandHander<>));
    x.BindWith(new DefaultBindingGenerator());
});

但在以下情况下没有返回实例:

kernel.Get<ICommandHandler<T>>(); 

【问题讨论】:

  • 你试过 kernel.Load(Assembly.GetExecutingAssembly());你需要把它放在 CreateKernel override
  • 我不确定我理解你的意思。我现在在 NinjectModule.Load() 方法中有 Kernel.Scan 代码。

标签: binding ninject conventions


【解决方案1】:

尝试查看GenericBindingGenerator 而不是DefaultBindingGenerator

【讨论】:

  • 这就是票!!谢谢你。你只是知道有时要寻找什么!
【解决方案2】:
// use Ninject.Extensions.Conventions for convention-based binding
kernel.Scan(scanner =>
    {
        // look for types in this assembly
        scanner.FromCallingAssembly();

        // make ISomeType bind to SomeType by default (remove the 'I'!)
        scanner.BindWith<DefaultBindingGenerator>();
    });

【讨论】:

    【解决方案3】:

    解决办法:

    Kernel.Scan(x => {
        x.FromAssemblyContaining<CoreModule>();
         x.BindingGenerators.Add(new GenericBindingGenerator(typeof(IHandleQuery<,>)));
          x.InSingletonScope();
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-01
      • 1970-01-01
      • 2012-08-27
      相关资源
      最近更新 更多