NInject提供者

时间:2015-08-20 06:52:59

标签: ninject

我是一个抽象类:

[Configuration]
public abstract class AbstractAddon : IAddon
{
    private readonly object configuration;

    public AbstractAddon(object configuration)
    {
        this.configuration = configuration;
    }
}

并且有几个实现。 我按惯例创建了一个绑定:

public class AddonsModule : Ninject.Modules.NinjectModule
{
    public override void Load()
    {
        this.Bind(b => b.FromAssembliesMatching("*")
            .SelectAllClasses()
            .InheritedFrom(typeof(UIExtensibility.AbstractAddon))
            .BindAllBaseClasses()
            .Configure(c => c.InSingletonScope())
        );

        this.Bind<object>().ToProvider<ConfigurationProvider>().WhenClassHas<UIExtensibility.ConfigurationAttribute>();
    }

ConfigurationProvider是:

private class ConfigurationProvider : IProvider<object>
{
    public object Create(IContext context)
    {
        return "configuration settings";
    }
    //...
}

Create的{​​{1}}方法中,我想我可能会被允许访问哪个是正在被请求的具体类。

每个具体类都有一个属性ConfigurationProvider,我需要它才能提供正确的配置对象。但是,我不知道如何知道NInject在执行PluginInformation方法提供程序时正在创建的具体类。然后,我无法获得我需要的Create属性来链接它并提供正确的配置对象。

我怎样才能访问NInject在执行PluginInformation提供程序时请求的具体类?

1 个答案:

答案 0 :(得分:1)

问题在于,在IContext上下文参数信息的第一级,只有Type提供的信息,在我的情况下:object类型。

但是IContext附带完整的父级和计划上下文。因此,在执行提供程序的Create方法时,解决了一些分辨率的分支,例如:AbstractAddon。每个已解决的信息都在&#39; 上下文&#39;比如IContext个字段。此外,未来的步骤还包括计划&#39;比如IContext字段。

因此,为了获得具体类型(AbstractAddon的继承类),我需要阅读下一个属性:context.Request.ParentContext.Plan.Type