gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 23:34:25 24 4
gpt4 key购买 nike

我开始在这个相对较小的项目上使用 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com