创建Castle.Windsor拦截器的问题

时间:2018-01-19 12:13:39

标签: c# .net dependency-injection castle-windsor interceptor

好的,我正在对此失去理智...

我正在尝试创建一个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接口......那么问题是什么呢?

谢谢: - )

1 个答案:

答案 0 :(得分:1)

有两个名为IInterceptor

的接口
  • Castle.DynamicProxy.IInterceptor
  • Castle.Core.Interceptor.IInterceptor

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