Проблема с Виндзорскими вызовами «обобщенных» методов после добавления перехватчика - PullRequest
2 голосов
/ 09 августа 2009

У меня есть приложение, которое работало нормально, который использует Windsor для IoC. Я хочу регистрировать вызовы методов, параметры и время выполнения всех вызовов, сделанных для компонентов, созданных Windsor, поэтому я реализовал LoggingInterceptor, который реализует IInterceptor, который содержит:

Stopwatch sw = new System.Diagnostics.Stopwatch();
sw.Start();
invocation.Proceed();  // EXCEPTION IS THROWN HERE
sw.Stop();
Logger.Debug(.....

Теперь операции, которые ранее работали нормально, генерируют исключения VerificationException со следующим сообщением:

Метод Repositories.RepositoryBase.GetAll: аргумент типа «ET» нарушает ограничение параметра типа «ET».

Подпись метода:

public IList<ET> GetAll<ET>() where ET : EntityBase2, IEntity2  

(где EntityBase2 и IEntity2 из LLBLGenPro)

Вызывающий метод выглядит следующим образом:

public IList<ServerEntity> GetServers()
{
   return GetRepository<IServerRepository>().GetAll<ServerEntity>();
}

(где GetRepository <> () - это просто оболочка для ServiceLocator)

Если я закомментирую перехватчик из конфигурации замка, все снова будет работать нормально.

Почему это происходит сейчас, и есть ли исправление, чтобы я мог использовать свой перехватчик регистрации?

спасибо

Ответы [ 2 ]

1 голос
/ 29 октября 2009

Это происходит только в отладчике Visual Studio?

Это также происходит в последней версии Castle? (который вы можете найти здесь )

1 голос
/ 10 августа 2009

Если вы используете более старую версию Windsor (RC3 или более раннюю), я не думаю, что она поддерживает перехватчики на типах Generic, потому что старая версия DynamicProxy не поддерживает ее.

Возможно, вы попытаетесь выполнить обновление до последней версии Windsor. Он использует DynamicProxy2 под капотом, который работает с универсальными типами.

...