4

不知道在这里做什么。尝试拦截具有构造函数注入的工厂时,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;
    }
}

例外:

LightInject.dll 中出现“System.InvalidCastException”类型的异常,但未在用户代码中处理

附加信息:无法将“System.Func`1[ConsoleApplication1.IAwesome]”类型的对象转换为“System.Object[]”类型。

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

4

1 回答 1

8

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

该错误已修复,一旦有新的 NuGet 包可用,我将在此处发布。

此致

伯恩哈德·里希特

于 2014-05-13T14:32:36.600 回答