基础设施服务合同应该放在哪里?

2024-01-09

I have UI, 应用, Domain and 基础设施 Layers.

In my 基础设施图层参考Domain and 应用层注册两者的服务接口Ninject.

但我需要在我的应用将服务分层基础设施层,然后我需要引用基础设施层在我的应用 Layer.

问题是基础设施图层参考应用图层以及我何时参考基础设施层入应用图层显示以下错误:

无法添加对“基础设施”的引用。添加此项目作为引用会导致循环依赖。


基础设施服务契约应在使用它们的层(域和应用程序)中定义,但在基础设施中实现。看一眼依赖倒置原则 http://en.wikipedia.org/wiki/Dependency_inversion_principle and 洋葱架构 http://jeffreypalermo.com/blog/the-onion-architecture-part-1/。基础设施层应该依赖于App和Domain。您的域和应用程序不应依赖于基础设施。它们应该依赖于用自己的术语定义的抽象。你可能会发现这个answer https://stackoverflow.com/questions/7306109/having-trouble-putting-real-world-logic-into-the-ddd-domain-layer/7311521#7311521有趣的。该抽象的实际实现应该在应用程序启动时注入所谓的成分根 http://blog.ploeh.dk/2011/07/28/CompositionRoot.aspx.

例如,在您的应用程序中,您可以定义和接口如下:

ICanNotifyUserOfSuccessfullRegistration

基础设施层将引用应用程序并将使用 SMTP 或 SMS 类实现此接口:

class SmsNotificator : ICanNotifyUserOfSuccessfullRegistration { ... }

稍后此实现将通过 DI 容器注入到应用程序中。应用程序不会依赖于基础设施,但仍会使用它,因此依赖倒置。我推荐阅读.NET 中的依赖注入 http://www.manning.com/seemann/,即使您使用 Java 或其他堆栈。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

基础设施服务合同应该放在哪里? 的相关文章

  • 绑定到布尔值的可见性的 TargetNullValue

    我有一个Grid whose Visibility使用以下方法将属性绑定到某个模型的布尔属性Converter
  • 如何制作可插入静态类

    我知道如何在 C 中制作可插入的东西 定义一个接口 Activator CreateInstance
  • 如何覆盖 AutoMapper 对单个属性的配置?

    我正在尝试使用 AutoMapper 12 0 0 来修复错误的字符串属性值 在下面的示例中 我的类具有一些字符串属性 并且对于除我需要执行的属性之外的所有属性 Trim 对于剩下的一个 我需要执行 ToUpper 代替 Trim 问题是我
  • CngKey.Create 不支持请求的操作

    我正在尝试在 C 程序集中 以编程方式 动态生成自签名证书 目标 NET 4 0 作为根CA来生成其他证书 该证书不需要保留在 Windows 证书存储中 我会将其导出为文件 通读这个问题 https stackoverflow com q
  • 在.NET Core中注入通用接口

    我想将此接口注入到我的控制器中 public interface IDatabaseService
  • 等待异步TaskEx

    What is TaskEx In http www i programmer info programming c 1514 async await and the ui problem html start 1 http www i p
  • 使用具有 ThreadStatic 属性的并行扩展。会不会泄漏内存?

    我相当频繁地使用并行扩展 而且我刚刚遇到了一种情况 使用线程本地存储可能是明智的 允许工作线程重用对象 因此 我正在查看 ThreadStatic 属性 该属性将静态字段 变量标记为每个线程具有唯一值 在我看来 在没有任何 PE 线程重用保
  • JIT编译后的代码是如何注入内存并执行的?

    考虑一个典型的 Windows x86 或 AMD64架构 内存为 分为可执行部分 无法写入 和 数据部分 可以写入但不能写入 被处决 想想 DEP JIT 在内存中编译方法 通常 不存储任何东西 磁盘 而是将其移动到哪里 下一条指令指针可
  • 寻找系统、全面、完整的VB.NET和C#语法比较

    我是一名经验丰富的 VB NET 开发人员 想从 C 开始 我正在寻找两种语言语法之间基于网络的比较作为快速参考 我发现自己正在整理 VB NET 语法模板 例如 Public MustInherit Class BaseClass Pub
  • Sql Server 2008 强制日期从 dd/MM/yyyy 到 MM/dd/yyyy

    我在 sql server 2008 上遇到了一个奇怪的问题 我试图用dd MM yyyy格式写入sql server 2008 但是插入日期后它会自动转换为MM dd yyyy 注意 我的电脑时钟格式是dd MM yyyy 我的报告查看器
  • 使用来自其他构造函数的参数统一解析

    我正在使用 Unity 并注入所有依赖项 假设我有一个Manager像这样上课 public class Manager IManager public Manager IRepository repository string custo
  • IoC比较[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 开发 ASP NET Web 应用程
  • 变量声明后的一个问号是什么意思? [复制]

    这个问题在这里已经有答案了 在玩开源项目时 我尝试ToStringDateTime 对象被编译器阻止 当我跳到定义时 我看到了这个 public DateTime timestamp 有人可以告诉我这叫什么以及为什么它可能有用吗 这是一个可
  • protobuf-net 代码生成器

    我正在将 Google Proto Buffers 合并到我的项目中 Windows 的 protoc exe 生成用于序列化 反序列化的头文件和源文件的方式非常好 我需要 protobuf net 代码生成器 因此 例如 如果我有一个 P
  • C# Visual Studio 动态代码片段

    我正在开发一个 WinForms 项目 每天都会执行一些重复性的任务 所以我认为创建代码片段 https msdn microsoft com en us library ms165394 v vs 110 aspx会帮助我 但它仅适用于固
  • 如何处理作为参数传递到方法中的 Lambda 表达式 - C# .NET 3.5

    我对 Lambda 表达式的了解有点不稳定 虽然我可以编写使用 Lambda 表达式 又名 LINQ 的代码 但我正在尝试编写自己的方法 该方法采用一些 Lambda 表达式类型的参数 背景 我正在尝试编写一个方法 该方法从任何其他对象类型
  • 防止单个可执行文件的多个进程实例

    我正在使用 NET 和 C 我想阻止同一可执行文件的两个实例同时运行 但我不想阻止从另一个文件夹运行的同一进程 例如 我有一个位于两个不同位置的可执行文件 C MyProject Master Program exe C MyProject
  • 合并大文件的最佳方法是什么?

    我必须合并数千个大文件 每个大约 200MB 我想知道合并这些文件的最佳方法是什么 行将有条件地复制到合并文件中 可以使用 File AppendAllLines 或使用 Stream CopyTo 吗 使用 File AppendAllL
  • Azure 函数中的 Autofac 依赖注入

    我正在尝试使用 Azure 函数中的 Autofac IOC 来实现 DI 我需要构建容器 但不确定将构建容器的代码放在哪里 我确实写了一篇博客文章 用于在 Azure Functions 中使用 Autofac 进行依赖项注入 看看这里
  • 有关 Endian 性和 .Net 的详细信息?

    我有几个关于字节顺序的问题 这些问题足够相关 我保证将它们作为一个问题提出 1 字节顺序是由 Net还是由硬件决定的 2 如果是由硬件决定的 我怎样才能在C 中找出硬件的字节序 3 字节序是否影响二进制交互 例如 OR AND OR 或移位

随机推荐