如何在lightinject中拦截工厂



不知道该怎么做。当试图拦截具有构造函数注入的工厂时,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;
    }
}
异常:

类型为'System '的异常。InvalidCastException'在lightinjection .dll中发生,但未在用户代码中处理

附加信息:无法强制转换类型为'System.Func ' 1的对象[ConsoleApplication1]。IAwesome]'来输入'System.Object[]'.

对不起,我不能为Lightinject创建一个新标签。不够:/

我是LightInject的作者,当拦截依赖于运行时参数(如Awesome类)的服务实例时,它已被证实是一个bug。

这个错误已经修复了,一旦有新的NuGet包可用,我就会在这里发布。

敬上

Bernhard Richter

相关内容

  • 没有找到相关文章

最新更新