Не знаю, что здесь делать. 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" возникло в LightInject.dll, но не было обработано в пользовательском коде.
Дополнительная информация: невозможно преобразовать объект типа "System.Func`1[ConsoleApplication1.IAwesome]" в тип "System.Object[]".
Извините, я не смог создать новый тег для Lightinject. Недостаточно представителей :/