作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
不确定在这里做什么。尝试拦截具有构造函数注入(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;
}
}
异常(exception):
An exception of type 'System.InvalidCastException' occurred in LightInject.dll but was not handled in user code
Additional information: Unable to cast object of type 'System.Func`1[ConsoleApplication1.IAwesome]' to type 'System.Object[]'.
抱歉,我无法为 Lightinject 创建新标签。没有足够的代表:/
最佳答案
我是 LightInject 的作者,在拦截依赖于运行时参数的服务实例(例如 Awesome 类)时,已确认它是一个错误。
错误已修复,一旦有新的 NuGet 程序包可用,我会立即发回此处。
最好的问候
伯恩哈德·里希特
关于c# - 如何在 lightinject 中拦截工厂,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23585134/
我是一名优秀的程序员,十分优秀!