Проблемы с созданием перехватчика Castle.Windsor
Хорошо, я официально схожу с ума по этому поводу...
Я пытаюсь создать перехватчик Castle.Windsor, но разрешение из контейнера продолжает выдавать это исключение:
DependencyResolverException: An interceptor registered for
DI_Test.DatabaseService doesn't implement the IInterceptor interface
Насколько я вижу, я сделал все по книге, и содержимое контейнера (в режиме отладки) не сообщает о каких-либо неправильно настроенных сервисах.
Конфигурация контейнера:
public class ControllersInstaller : IWindsorInstaller
{
public void Install(IWindsorContainer container, IConfigurationStore store)
{
container
.Register(Component.For<Runner>())
.Register(Component.For<IDataDependency>()
.ImplementedBy<DatabaseService>()
.LifestyleSingleton()
.Interceptors(InterceptorReference.ForKey("wait")).Anywhere)
.Register(Component.For<WaitAndRetryInterceptor>().LifeStyle.Singleton
.Named("wait"))
;
}
}
Мой перехватчик:
public class WaitAndRetryInterceptor : IInterceptor
{
public void Intercept(IInvocation invocation)
{
//throw new NotImplementedException();
}
}
Моя программа:
public class Runner
{
public void Run()
{
_dataDependency.GetData();
}
public Runner(IDataDependency dataDependency)
{
_dataDependency = dataDependency;
}
private readonly IDataDependency _dataDependency;
}
public interface IDataDependency
{
void GetData();
}
public class DatabaseService : IDataDependency
{
public void GetData()
{
throw new NotImplementedException();
}
}
Программа отлично работает без настройки перехватчика.
Я не могу понять, ПОЧЕМУ он выбрасывает это исключение. Перехватчик четко реализует интерфейс IInceptceptor... так в чем же проблема?
Спасибо:-)
1 ответ
Решение
Есть два интерфейса с именем IInterceptor
Castle.DynamicProxy.IInterceptor
Castle.Core.Interceptor.IInterceptor
Не уверен, в чем разница между ними, но чтобы заставить его работать, вы должны использовать первый.