好吧,我正式对此失去理智...
我正在尝试创建一个 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接口...那么问题出在哪里呢?
谢谢 :-(
有两个接口名为IInterceptor
-
Castle.DynamicProxy.IInterceptor
-
Castle.Core.Interceptor.IInterceptor
不确定它们之间有什么区别,但要让它工作,您必须使用第一个。