Я пытаюсь настроить перехват для работы с Ninject, который мы использовали в качестве нашей инфраструктуры инъекций зависимостей некоторое время.Проблемы с динамическим прокси-вызовом Ninject Перехват
Я загрузил расширение перехвата из NuGet и попробовал его как с реализацией Castle Dynamicproxy, так и с реализацией LinFu, но не мог работать с нашими приложениями.
Замок дал ошибку при создании прокси-сервера в классе, у которого не было конструктора без параметров, так как все объекты службы имеют свои зависимости, введенные через конструктор, это проблема. Ошибка:
System.ArgumentException: невозможно создать экземпляр класса: emedia.RapidSystems.Subscriber.Presenters.RRSubmissionPresenter. Не удалось найти конструктор без параметров. Имя параметра: constructorArguments
Линьфу перехватчик работал лучше, вплоть до тех пор, пока код называется метод с родовым параметром, то он дал мне следующее:
System.ArgumentException: Универсальные типы являются недопустимыми. Имя параметра: MethodInfo
Вот упрощенная версия кода для одного из классов, я пытаюсь перехватить:
[LogCalls]
public class Repository<T> : IRepository<T>
where T : class
{
public virtual T GetEntity<TKey>(ObjectContext context, TKey key)
{
var entity = GetEntity(context, key, _emptyLoadingStrategy);
return entity;
}
public virtual IQueryable<T> GetAll(ObjectContext context)
{
var query = GetAll(context, _emptyLoadingStrategy);
return query;
}
public virtual T Add(ObjectContext context, T entity)
{
context.AddObject(EntitySetName(context), entity);
return entity;
}
//other code goes here
}
Сложение и GETALL работать нормально, но ошибка происходит, когда GetEntity вызывается на прокси-сервер.
На данный момент я застреваю, поскольку ни один перехватчик не работает с базой кода. Кто-нибудь получил перехват Ninject, работающий с реальной сложной производственной системой, а не простой демонстрационный класс, и если да, то как? Я не возражаю против того, какой перехватчик я использую, пока он работает.
Или перехват с помощью Ninject пока еще недостаточно зрелый, и мне нужно посмотреть на замену всего на что-то еще, например Unity?
Я попробовал загрузить из NuGet, что он не запускается вообще, и дает ошибку «Метод не найден:» System.Delegate System.Reflection.MethodInfo.CreateDelegate (System.Type).» В любом случае я не могу использовать предварительную версию в производственной среде, поэтому я думаю, что ответ пока еще недостаточно зрелый, и я должен дождаться, пока действительно выпущена версия 3. – Mant101