NInject使用第三个提供程序绑定类

时间:2016-03-16 09:33:48

标签: c# dependency-injection ninject

我有一个界面和一个抽象类:

public interface IBackend
{
    Backend.Domain.User me();
    //...
}

抽象类:

public abstract class AbstractBackend : IBackend
{

    protected Backend.Infrastructure.Provider.IDataProvider dataProvider;

    public AbstractBackend()
        : this(null)
    {
    }

    public AbstractBackend(Backend.Infrastructure.Provider.IDataProvider dataProvider)
    {
        this.dataProvider = dataProvider;
    }

    #region User

    public abstract Backend.Domain.User me();

    #endregion
    //...
}

所有这些都在大会上定义:Backend.Infrastructure。 我已经开发了几个AbstractBackend实现(在单独的项目中):MemoryBackendLocalBackendWebApiBackend

每个实现都需要不同的信息才能创建:

根据{{​​1}}

MemoryBackend没有额外信息:

AbstractBackend

但是,public class MemoryBackend : AbstractBackend { #region Constructors & Initializers public MemoryBackend(Backend.Infrastructure.Provider.IDataProvider dataprovider) : base(dataprovider) { this.initialization(); } //... } 需要一些额外的信息才能配置:

WebApiBackend

如您所见,public WebAPIBackend(Identity.UserIdentity userIdentity, Identity.ClientIdentity clientIdentity, Backend.Infrastructure.Provider.IDataProvider dataProvider) : base(dataProvider) { this.userIdentity = userIdentity; this.clientIdentity = clientIdentity; this.initialization(); } 需要提供WebApiBackenduser

我试图解决为每个项目中的每个concreate后端创建client的问题。

那么,我对Provider有几个具体的补充,我在每个集合上都有几个AbstractBackend

问题是,从第三个项目开始,按惯例将所有NInject Providers实施结合起来:

AbstractBackend

如何从第三个项目获取并绑定每个Provider及其Backend?

示例:

  • UI有一个AbstractBackend。
  • UI有一个NInject模块,用于加载任何public class BackendsModule : Ninject.Modules.NinjectModule { public override void Load() { this.Bind(b => b.FromAssembliesMatching("*Backend*") .SelectAllClasses() .InheritedFrom(typeof(Backend.Infrastructure.AbstractBackend)) .BindAllBaseClasses() .Configure(c => c.InSingletonScope()) ); } 实现。
  • 用户界面查看AbstractBackend构造函数,它可以激活MemoryBackend对象。
  • UI查看MemoryBackend构造函数,但无法查找WebApiBackend或客户端对象。它需要一个提供者。如何绑定user assembly?
  • 上的此提供程序

到目前为止,我能够弄清楚,一个可能的解决方案是加载每个WebApiBackend实现程序集上提供的NInject模块。

那么,我将能够在每个Backend实现上创建NInject模块,然后UI就可以加载这些模块......

0 个答案:

没有答案