Привязка на основе соглашений в Ninject 3.0

Я пытаюсь настроить Ninject в своем новом проекте и хочу сканировать сборки, используя соглашения, чтобы

IFoo

автоматически разрешит

IBar

Все образцы и документация описывают использование этого подхода

kernel.Scan(...)

в то время как ядро ​​​​Ninject 3, похоже, вместо этого использует .Load. Если я использую Load для сканирования, то как мне настроить сканирование с соблюдением соглашений?

Изменить

Мне удалось заставить его работать, используя: https://github.com/ninject/ninject.extensions.conventions/wiki/What-is-configuration-by-convention

Однако теперь я не могу загрузить свои модули. Я использую приведенный ниже код и получаю сообщение об ошибке ниже.

    IKernel kernel = new StandardKernel();
    kernel.Bind(x => x
        .FromAssembliesMatching("Crt.*.dll")
        .SelectAllTypes()
        .BindAllInterfaces()
        );
    kernel.Load("*.dll");
    return kernel;

Ошибка:

Ninject.ActivationException was unhandled
  Message=Error activating ITrainingEngine
More than one matching bindings are available.
Activation path:
  1) Request for ITrainingEngine

Suggestions:
  1) Ensure that you have defined a binding for ITrainingEngine only once.

  Source=Ninject
  StackTrace:
       at Ninject.KernelBase.Resolve(IRequest request) in c:\Projects\Ninject\ninject\src\Ninject\KernelBase.cs:line 380
       at Ninject.ResolutionExtensions.GetResolutionIterator(IResolutionRoot root, Type service, Func`2 constraint, IEnumerable`1 parameters, Boolean isOptional, Boolean isUnique) in c:\Projects\Ninject\ninject\src\Ninject\Syntax\ResolutionExtensions.cs:line 263
       at Ninject.ResolutionExtensions.Get[T](IResolutionRoot root, IParameter[] parameters) in c:\Projects\Ninject\ninject\src\Ninject\Syntax\ResolutionExtensions.cs:line 37
       at Crt.BlackBox.Train.Program.Run() in C:\code\Crimson\CRT\readmission\src\Crt.BlackBox\Crt.BlackBox.Train\Program.cs:line 54
       at Crt.BlackBox.Train.Program.Main(String[] args) in C:\code\Crimson\CRT\readmission\src\Crt.BlackBox\Crt.BlackBox.Train\Program.cs:line 24
       at System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args)
       at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
       at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
       at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
       at System.Threading.ThreadHelper.ThreadStart()
  InnerException: 

person Ryan Vice    schedule 27.04.2012    source источник


Ответы (1)


Используйте SelectAllClasses вместо SelectAllTypes

person Remo Gloor    schedule 06.05.2012