c# - 如何将 IoC 容器保持在一个地方,而内部类需要在 bee 构造后创建依赖项

标签 c# dependency-injection ioc-container ninject-2

我开始在这个相对较小的项目上使用 Ninject,但我遇到了一个问题:我有这个类

class SomeService : ISomeService 

这取决于

class BizLogicModule : IBizLogicModule

这又取决于

class DataRepository : IDataRepository

DataRepository 的构造函数如下所示:

DataRepository(BizEntityModel context)

现在,我需要能够跨多个 IDataRepository 实例使用单个 BizEntityModel 实例。
我还需要在IBizLogicModule 的生命周期内创建IDataRepositoryIBizLogicModule 不知道 Ninject,我想保持这种状态。

所以我的问题是: 如何使用 Ninject 内核将所有这些连接起来,同时:

  1. 不必绕层传递内核实例。

  2. 让代码的可读性接近 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 注册(代码已更新)。

如果我理解正确:我可以使用“工厂方法”在 IBizLogicModule 中创建 IDataRepository 的实例。但这给我留下了:
1) 我需要将 BizEntityModel 传递给工厂方法,有时是全新的,有时是现有实例。使用工厂方法,每次都会创建一个新的。
2) 这是不是 SomeService 在另一个程序集中的问题,只有它有对 Ninject.dll 的引用?

最佳答案

我像我理解的那样重复这个问题:

  1. 每个 BizLogicModule 实例只存在一个 BizEntityModel 实例(它们没有相互引用)

  2. 每当 BizLogicModule 创建 DataRepository 时,都会重用此 BizEntityModel

  3. 有几个BizLogicModule

如果这是正确的,则 NamedScope 扩展文档中的第二个示例应该适合您。参见 https://github.com/ninject/ninject.extensions.namedscope/wiki/InNamedScope

确保您阅读了此扩展的完整文档:https://github.com/ninject/ninject.extensions.namedscope/wiki

关于c# - 如何将 IoC 容器保持在一个地方,而内部类需要在 bee 构造后创建依赖项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5489489/

相关文章:

asp.net-mvc - 如何在 ASP.NET MVC 的 RegisterGlobalFilters 方法中进行依赖项注入(inject)

c# - 如何将 MVC 5 项目模板添加到 VS 2012?

C# 将 char 转换为 8x8 二进制的方法

c# - 为不同的 MvvmCross (v3) 平台处理 GoBack 的最佳方法是什么

javascript - Angular promise 然后回调不会在 chrome.storage.local.get 上触发

java - AnnotationConfigApplicationContext.getBean返回一个不同的bean,Spring

c# - 如何将 ADO.net 通用查询转换为 Entity Framework 或 Linq

java - 带 Spring 的 MongoDb 工厂

java - 如何避免Google guice注入(inject)器getInstance()由于null而重复调用?

c# - 为什么 CaSTLe Windsor 试图将我的 'Content' 和 'Scripts' 文件夹解析为 Controller ?