好的,我正在对此失去理智...
我正在尝试创建一个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();
}
}
该程序在没有拦截器配置的情况下完美运行。
我无法弄清楚为什么会抛出这个异常。拦截器显然正在实现IInterceptor接口......那么问题是什么呢?
谢谢: - )
答案 0 :(得分:1)
有两个名为IInterceptor
Castle.DynamicProxy.IInterceptor
Castle.Core.Interceptor.IInterceptor
不确定它们之间有什么区别,但要使它工作,你必须使用第一个。