Как внедрить IServiceContainer при использовании LighInject? - PullRequest
0 голосов
/ 01 октября 2019

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

Вот что я хочу решить:Во время выполнения у меня есть Type, из которого мне нужен экземпляр. Поэтому я хочу сделать что-то вроде SomeResolver.GetInstance(myType).

Как я могу сделать это с LightInject?

1 Ответ

0 голосов
/ 02 октября 2019

У меня есть рабочее решение. Не знаю, является ли это «предпочтительным» способом, поэтому, если у кого-то есть идея получше, пожалуйста, дайте мне знать:)

Вот что я сейчас использую:

container.Register<ITypeResolver>(s => new LightInjectTypeResolver(s));

А вот класс, реализующий ITypeResolver:

public class LightInjectTypeResolver : ITypeResolver
{
    private readonly IServiceFactory _serviceFactory;

    public LightInjectTypeResolver(IServiceFactory serviceFactory)
    {
        _serviceFactory = serviceFactory;
    }

    public object GetType(Type entity)
    {
        return _serviceFactory.GetInstance(entity);
    }
}
...