如何拦截lightinject中的工厂

时间:2014-05-10 19:05:22

标签: c# dependency-injection aop interceptor light-inject

不知道该怎么做。尝试拦截具有构造函数注入的工厂时,invocationInfo.Proceed()总是失败。

var container = new ServiceContainer();
container.Register<ICool,Cool>();
container.Register<ILogger, Logger>();
container.Register<IInterceptor, LoggingInterceptor>();

//Two problem lines
container.Register<int, IAwesome>((factory, value) => new Awesome(value, factory.GetInstance<ICool>()));
container.Intercept(sr => sr.ServiceType == typeof(IAwesome), sf => sf.GetInstance<IInterceptor>());

var awesome = container.GetInstance<int,IAwesome>(100);
awesome.Yo();

在我的拦截器中失败了。

public class LoggingInterceptor : IInterceptor
{
    private ILogger _logger;
    public LoggingInterceptor(ILogger logger)
    {
        _logger = logger;
    }
    public object Invoke(IInvocationInfo invocationInfo)
    {
        var returnValue = invocationInfo.Proceed(); //Exception here
        return returnValue;
    }
}

例外:

  

类型&#39; System.InvalidCastException&#39;的例外情况发生在LightInject.dll中但未在用户代码中处理

     

附加信息:无法转换类型&System; System.Func`1 [ConsoleApplication1.IAwesome]&#39;输入&#39; System.Object []&#39;。

抱歉,我无法为Lightinject制作新标签。没有足够的代表:/

1 个答案:

答案 0 :(得分:7)

我是LightInject的作者,并且在拦截依赖运行时参数(例如Awesome类)的服务实例时已经确认它是一个错误。

该错误已得到修复,只要有新的NuGet包,我就会在此发回。

祝你好运

Bernhard Richter