我有一个界面和一个抽象类:
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
实现(在单独的项目中):MemoryBackend
,LocalBackend
和WebApiBackend
。
每个实现都需要不同的信息才能创建:
根据{{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();
}
需要提供WebApiBackend
和user
。
我试图解决为每个项目中的每个concreate后端创建client
的问题。
那么,我对Provider
有几个具体的补充,我在每个集合上都有几个AbstractBackend
。
问题是,从第三个项目开始,按惯例将所有NInject Providers
实施结合起来:
AbstractBackend
如何从第三个项目获取并绑定每个Provider及其Backend?
示例:
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
对象。MemoryBackend
构造函数,但无法查找WebApiBackend
或客户端对象。它需要一个提供者。如何绑定user
assembly?到目前为止,我能够弄清楚,一个可能的解决方案是加载每个WebApiBackend
实现程序集上提供的NInject模块。
那么,我将能够在每个Backend
实现上创建NInject模块,然后UI就可以加载这些模块......