我是一个抽象类:
[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
提供程序时请求的具体类?
答案 0 :(得分:1)
问题在于,在IContext
上下文参数信息的第一级,只有Type
提供的信息,在我的情况下:object
类型。
但是IContext
附带完整的父级和计划上下文。因此,在执行提供程序的Create
方法时,解决了一些分辨率的分支,例如:AbstractAddon
。每个已解决的信息都在&#39; 上下文&#39;比如IContext
个字段。此外,未来的步骤还包括计划&#39;比如IContext
字段。
因此,为了获得具体类型(AbstractAddon的继承类),我需要阅读下一个属性:context.Request.ParentContext.Plan.Type
。