Как извлечь информацию о точном типе объекта, который является целью внедрения, из IContext в Ninject? - PullRequest
2 голосов
/ 13 марта 2012

В моем приложении есть необходимость создавать реализации интерфейса, которые зависят от типа объекта, в котором они используются. Для этого я решил реализовать потомка SimpleProvider, который в терминах классического примера Ninject должен идтикак:

public class MyProvider: Provider<IWeapon>
{
    protected override IWeaponCreateInstance(IContext context)
    {
        //if the weapon user is of type samurai
        {
             return new Katana();
        }
        //if the weapon user implements IHorseman
        {
             return Kernel.Get<IHorsemanWeapon>();
        }
        return new Sword;
    }
}

В моем конкретном случае я хочу использовать LogManager.GetLogger (type.FullName).Проблема для меня - отсутствие исчерпывающего описания IContext или неспособность найти его - и поэтому я не знаю, как получить тип из него.

1 Ответ

3 голосов
/ 13 марта 2012

Вы можете получить цель инъекции с помощью IContext.Request.Target:

public class MyProvider: Provider<IWeapon>
{
    protected override IWeaponCreateInstance(IContext context)
    {
        if (context.Request.Target.Type == typeof(Samurai))
        {
             return new Katana();
        }
        if (typeof(IHorseman).IsAssignableFrom(context.Request.Target.Type))
        {
             return Kernel.Get<IHorsemanWeapon>();
        }
        return new Sword;
    }
}

. Подробнее о Контекстные привязки .

...