gpt4 book ai didi

dependency-injection - 依赖注入(inject) : How to inject when using a multi-project solution

转载 作者:行者123 更新时间:2023-12-04 16:55:30 29 4
gpt4 key购买 nike

希望这个问题不是太愚蠢,我试图掌握更高级的编程原理,因此试图习惯使用 Ninject 进行依赖注入(inject)。

因此,我的模型分为几个不同的 .dll 项目。一个项目定义了模型规范(接口(interface)),另外几个项目实现了这些接口(interface)。所有模型项目都需要使用某种数据库系统,因此它们都需要访问另一个实现我所有数据库逻辑的 .dll。但是,重要的是它们都可以访问我的数据库对象的同一个实例,所以如果只为每个模型创建一个实例是不够的。

不过,我不太确定如何使用依赖注入(inject)来实现这一点。我的第一个想法是创建一个单独的 DI 项目并将所有接口(interface)绑定(bind)到它们各自的实现,因此 DI 项目需要引用所有其他项目(模型接口(interface)和实现、数据库系统等)。再说一遍,模型需要访问 DI 项目,例如,它们需要从 DI 系统 (Ninject) 请求数据库系统。当然这会创建一个循环引用(将 DI 项目绑定(bind)到模型和模型到 DI 项目),所以这是不可能的。

长话短说,我需要一种编程模式,它允许我将模型接口(interface)绑定(bind)到它们的实现,但也允许模型实现从 Ninject 请求其他依赖项,例如

IModel1 -> Model1
IModel2 -> Model2 (different project)
IDatabase -> Database (different project)
Model1 -> request IDatabase -> get Database instance
Model2 -> request IDatabase -> get the same Database instance

很高兴得到一些建议,目前我陷入困境并且没有想法;)
谢谢!

最佳答案

the models would need access to the DI project since, for example, they'd need to request the database system from the DI System (Ninject)



当您使用依赖注入(inject)时,模型不需要访问 DI 框架,因为注入(inject)依赖项的是 DI 框架。模型对象不应该询问 DI 容器。当您的对象向容器询问依赖项时,它不称为依赖注入(inject),而是称为服务定位器。 Service Locator is an anti-pattern .

My first thought was to create a seperate DI-project



当你有一个应用程序(例如一个 web 应用程序)时,通常要做的事情是在启动项目中完全配置 DI 容器,尽可能靠近应用程序的入口点。这个组成所有对象图的入口点称为 Composition Root。 .

All model projects need to use some sort of database system, so they all need access to yet another .dll which implements all my database logic



尝试制作 POCO(普通旧 CLR 对象)模型/实体对象,或者至少确保这些对象不需要引用任何其他项目,这使您的架构(和测试)更加容易。

关于dependency-injection - 依赖注入(inject) : How to inject when using a multi-project solution,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6898733/

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