如何从Ninject中的IContext中提取关于作为注入目标的对象的确切类型的信息

本文关键字:目标 注入 对象 信息 类型 于作 Ninject 中的 IContext 提取 | 更新日期: 2023-09-27 18:27:30

在我的应用程序中,有必要创建接口的实现,这些实现取决于它们所使用的对象的类型。为此,我决定实现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(类型.FullName)。对我来说,问题是缺乏对IContext的全面描述,或者我找不到它,所以我不知道如何从中获取类型。

如何从Ninject中的IContext中提取关于作为注入目标的对象的确切类型的信息

您可以使用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;
    }
}

您可以阅读有关上下文绑定的更多信息。