我开始在这个相对较小的项目上使用 Ninject 并且遇到了一个问题:我有这个类
class SomeService : ISomeService
这取决于
class BizLogicModule : IBizLogicModule
这又取决于
class DataRepository : IDataRepository
有DataRepository
一个看起来像这样的演员:
DataRepository(BizEntityModel context)
现在,我需要能够BizEntityModel
跨多个实例使用单个IDataRepository
实例。
我还需要创造IDataRepository
一个IBizLogicModule
。IBizLogicModule
不知道 Ninject,我想保持这种状态。
所以我的问题是:如何使用 Ninject 内核连接所有这些,同时:
不必在层周围传递内核实例。
使代码的可读性接近于 Ninject 之前的代码(我只是使用工厂方法新建)。
到目前为止,我得到的接线的简单部分是:
Bind<SomeService>().To<ISomeService>();
Bind<BizLogicModule>().To<IBizLogicModule>();
Bind<DataRepository>().To<IDataRepository>();
Bind<BizEntityModel>().To<BizEntityModel>(); //ToSelf()
// .WithConstructorArgument(context => Kernel.Get<BizEntityModel>)
非常感谢您的指导
编辑:感谢您的回答!
这是请求的更多数据:
BizEntityModel
已向 Ninject 注册(代码已更新)。
如果我理解正确:我可以使用“工厂方法”创建实例IDataRepository
。IBizLogicModule
但这给我留下了:
1)我需要将 a 传递BizEntityModel
给工厂方法,有时它是全新的,有时它是现有实例。使用工厂方法,每次都会创建一个新的。
2)这SomeService
是另一个程序集中的问题吗,只有它有一个对 Ninject.dll 的引用?