创建 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();
    }
}

该程序无需配置拦截器即可完美运行。

我无法弄清楚的是为什么它会抛出此异常。拦截器显然正在实现IInterceptor接口...那么问题出在哪里呢?

谢谢 :-(

有两个接口名为IInterceptor

  • Castle.DynamicProxy.IInterceptor
  • Castle.Core.Interceptor.IInterceptor

不确定它们之间有什么区别,但要让它工作,您必须使用第一个。

最新更新