2016-02-12 3 views
0

У меня есть класс, который я использую для загрузки. как часть создания объекта, которую я использую по соглашению для привязки к интерфейсам.Ошибка выброса перехватчика Ninject. Динамический прокси

Все работает ОК, пока не попытаюсь добавить перехватчик.

public class ContainerBootstrapper : IDisposable 
    { 
     StandardKernel _c; 

     public ContainerBootstrapper() 
     { 
      _c =new StandardKernel(); 

      _c.Bind(b => b.FromAssembliesMatching("Facade*.*").SelectAllClasses().BindDefaultInterfaces()); 
      _c.Bind(b => b.FromAssembliesMatching("Object*.*").SelectAllClasses().BindDefaultInterfaces()); 
      _c.Bind(b => b.FromAssembliesMatching("Logger*.*").SelectAllClasses().BindDefaultInterfaces()); 

//even using the built in ActionInterceptor like this: 

_c.Intercept(c => true) 
      .With(new ActionInterceptor(invocation => 
        Console.Write(invocation.Request.Method.Name))); 

Когда эта линия ударил, я получаю ошибку - Ошибка при загрузке Ninject компонент IAdviceFactory Нет такой компонент не был зарегистрирован в контейнере компонентов ядра.

Предложения: 1) Если вы создали пользовательский подкласс для KernelBase, убедитесь, что у вас правильно реализован метод AddComponents(). 2) Убедитесь, что вы не удалили компонент из контейнера по вызову RemoveAll(). 3) Убедитесь, что вы случайно не создали несколько ядер.

У меня есть на вершине:

using Ninject.Extensions.Conventions; 
using Ninject.Extensions.Interception.Injection.Dynamic; 
using Ninject.Extensions.Interception.Infrastructure.Language; 
using Ninject.Extensions.Interception; 

и использовали NuGet для пакетов. Пробовал как динамические прокси, так и LinFu. Оба дали ту же ошибку.

У кого-нибудь есть идеи попробовать? Спасибо заранее.

ответ

0

Оказывается, хотя я имел ссылку на проект, выполняющий загрузку, и я думал, что все мои dll для ninject, где копируются автоматически, не так. После их перемещения вручную это сработало.