Я работаю с Ninject 2.0.2
Ninject.Extensions.Interception
с DynamicProxy2
Castle.Core
Castle.DynamicProxy2
Впрыск работал нормально.
Затем я вставил wcf между контроллером и бл слоями.
Для взаимодействия между слоями я использовал
Ninject.Extensions.Interception Яна Дэвиса.
Я использовал DynamicProxy2 для создания прокси с помощью
Castle.Core и Castle. Динамическая Proxy2.
В моем слое Bl в классах есть ссылки на Типы реализации
в слое DAL.
Перехватчик работает, когда я отмечаю атрибут [Inject]
на любое свойство существовало в слое BL.
Это означает, что когда я обрезаю свои соединения от BL до DAL, это работает
но это бесполезно.
Таким образом, вопрос в том, как сохранить возможность обращения к DAL даже
хотя я делаю это с помощью метода перехвата.
Я нашел только пост, который относится к теме -
http://dotnet.dzone.com/news/ninject-2-dependency-injection?utm_sourc...)
но это не объясняет, как с этим бороться.
В каждом классе я уже создал конструктор, а также поместил
Атрибут [Inject] над ним.
Примечание:
Если я удаляю Inject из свойства IMyClassDao, я получаю
Инъекция, но без собственности - она остается мертвой.
Как я могу оживить это?
Я недавно обновился до Ninject 2.0.2 с 1.5 - может это связано
версия вопроса?
У кого-нибудь есть решение для этого?
Обработка ядра:
using Ninject;
using Ninject.Modules;
using System.Configuration;
using System;
using Ninject.Extensions.Interception;
using Ninject.Extensions.Interception.Infrastructure.Language;
using Ninject.Extensions.Interception.Request;
private static IKernel createDefault()
{
IKernel _kernel = new StandardKernel(new
ControllerToBLModule(),new NHibernateModule(), new BlToDalModule());
_kernel.Intercept(doIntercept).With<ControllerToBlInterceptor>();
return _kernel;
}
в контроллере до бл:
public class ControllerToBLModule : NinjectModule
{
public override void Load()
{
Bind<IMyInterfaceBL>().To<MyClassBL>().InRequestScope();
}
}
в бл / даль:
public class BlToDalModule : NinjectModule
{
public override void Load()
{
Bind<IMyClassDao>().To<MyClassDaoImpl>().InRequestScope();
}
}
Так что код в моем Bl выглядит примерно так
public class MyClassBL: GlobalBL , IMyInterfaceBL
{
[Inject]
public MyClassBL() : base() { }
[Inject]
public IMyClassDao _daoInstance{get;set;}
public virtual IList<MyObject> GetMyObject()
{
...
}
}
и в DAL:
public class MyClassDaoImpl : GlobalDAOImpl, IMyClassDao
{
[Inject]
public MyClassDaoImpl() : base() { }
public virtual IList<MyObject> GetMyObjectDao()
{
...
}
}
ошибка, которую я получаю:
Выполнить
System.NotSupportedException: у родителя нет конструктора по умолчанию. Конструктор по умолчанию должен быть явно определен.
в System.Reflection.Emit.TypeBuilder.DefineDefaultConstructorNoLock (метод выполняет
атрибуты)
в System.Reflection.Emit.TypeBuilder.DefineDefaultConstructor (MethodAttribute s
атрибуты)
в System.Reflection.Emit.TypeBuilder.CreateTypeNoLock ()
в System.Reflection.Emit.TypeBuilder.CreateType ()
at Castle.DynamicProxy.Generators.Emitters.AbstractTypeEmitter.CreateType (Строитель типов
введите) в e: \ horn.horn \ ioc \ castle.dynamicproxy \ Working-2.2 \ src ....
Кто-нибудь знает, как я могу сохранить иерархию адресации слоев через Ninject при использовании метода перехвата?