Как перехватить фабрику в 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» возникло в LightInject.dll, но не было обработано в пользовательском коде.

Дополнительная информация: невозможно преобразовать объект типа «System.Func`1[ConsoleApplication1.IAwesome]» в тип «System.Object[]».

Извините, я не смог создать новый тег для Lightinject. Недостаточно представителей :/


person YurikoEX    schedule 10.05.2014    source источник
comment
Если вы закомментируете 6-ю строку, которая добавляет перехватчик, вы получите исключение? Я плохо понимаю 5-ю строку (не знаю про Lightinject), но, возможно, это не перехватчик вызывает исключение, а вы неправильно создаете экземпляр awesome переменной (я думаю, что ей нужно и число, и фабрика, вы указали только 100) .   -  person zafeiris.m    schedule 11.05.2014
comment
5-ю строку можно понять, взглянув на раздел параметров lightinject.net/#toc14. И если я закомментируйте 6-ю строку (перехватчик), инъекция работает как задумано.   -  person YurikoEX    schedule 12.05.2014


Ответы (1)


Я являюсь автором LightInject, и было подтверждено, что это ошибка при перехвате экземпляров службы, которые полагаются на аргументы времени выполнения, такие как класс Awesome.

Ошибка была исправлена, и я сообщу об этом, как только будет доступен новый пакет NuGet.

С наилучшими пожеланиями

Бернхард Рихтер

person seesharper    schedule 13.05.2014
comment
Есть ли ссылка на проблему, которую я мог бы посмотреть? Спасибо за ответ! - person YurikoEX; 14.05.2014