洋葱架构中的依赖解析

2023-11-22

The 洋葱架构是一种构建应用程序以保持关注点分离和松散耦合的方法(示例项目位于:http://onionarch.codeplex.com/)。依赖注入/解析是该架构的一个关键方面,因为它用于将所有层连接在一起。

上面的链接包含一个有关如何使用 Onion 分层构建 ASP.NET MVC 的示例应用程序。我真的很喜欢它,但大多数示例都使用 Ninject(我们都知道它非常慢)。我想知道是否有人可以详细说明如何将不同的 DI 工具(如 SimpleInjector、Unity 或 Autofac)集成到 Onion 项目中。

关键是所有层都只有 1 个依赖项(包括 MVC 项目),即 Core 层。除Dependency Resolution层外,该层可以引用所有层。

我很难将 MVC 项目设置为启动项目,使用 DI,并且不在 MVC 层中包含对 DI 工具的引用。


你的问题是

“如何集成不同的 DI 工具(如 SimpleInjector、Unity 或 Autofac)进入洋葱项目?”

我使用 StructureMap 而不是 Ninject,它的集成方式应该适用于任何其他 DI 框架。

正如您所说,只有依赖解析层应该引用所有其他层,它是洋葱架构的最外层。好吧,为此,我创建了一个名为引导程序。这是我引用 StructureMap 程序集的唯一项目。 在里面应用程序_启动该项目的文件夹中,我有一个名为StructureMap Mvc.cs看起来像这样:

[assembly: WebActivator.PreApplicationStartMethod(typeof(XXXX.BootStrapper.App_Start.StructuremapMvc), "Start")]

namespace XXXX.BootStrapper.App_Start
{
    public static class StructuremapMvc
    {
        public static void Start()
        {
            IContainer container = IoC.Initialize();
            System.Web.Mvc.DependencyResolver.SetResolver(new StructureMapDependencyResolver(container));
            GlobalConfiguration.Configuration.DependencyResolver = new StructureMapHttpDependencyResolver(container);
            ControllerBuilder.Current.SetControllerFactory(new StructureMapControllerFactory());
        }
    }
}

有趣的一行是:

[assembly: WebActivator.PreApplicationStartMethod(typeof(XXXX.BootStrapper.App_Start.StructuremapMvc), "Start")]

根据nugget包的描述:

WebActivator 是一个 NuGet 包,允许其他包执行 Web 应用程序中的一些启动代码。

很酷吧?您必须做的最后一件事是确保引导程序项目组装将被推至/binWeb 应用程序的文件夹(使用构建后操作或 OutputTo 块包可轻松设置)。这将避免您引用引导程序在您的 MVC 项目中进行项目并打破洋葱架构原则。

因此,有了这一切,它就完全符合组合根模式当您的应用程序启动时,模块将组合在一起。

希望这可以帮助!

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

洋葱架构中的依赖解析 的相关文章

  • 在 Roslyn 分析器中检查表达式类型的正确方法?

    我正在用 Roslyn 编写一个代码分析器 我需要检查是否ExpressionSyntax属于类型Task or Task
  • 如何使用 Newtonsoft Json.NET 处理 JSON 文档中的对象引用?

    我有一个 json 数据集 带有标准数据字段和参考字段 它看起来像这样 id 1 name Book description Something you can read id 2 name newspaper description re
  • 通过 Active Directory 搜索进行有效分页

    在 NET 中使用 Active Directory 搜索进行分页的有效方法是什么 在 AD 中进行搜索的方法有很多 但到目前为止我找不到如何有效地进行搜索 我希望能够表明Skip and Take参数并能够检索结果中与我的搜索条件匹配的记
  • 在 MS word .docs 中插入 MathMl 、 Tex 或 LaTex 方程?

    我一直在寻找 C 中 Net 的一些 dll 用于在 MS Word 中插入任何 MathMl Tex 或 LaTex 方程 我尝试了一些类似 DocX 的工具 但它们失败了 你知道吗 或任何提示如何做到这一点 谢谢 Word 2007 可
  • 卸载 SSL 时保护表单身份验证 Cookie

    我正在尝试使用 ASP NET MVC 2 0 和表单身份验证来保护我当前正在开发的网站 为了保护表单身份验证cookie 我想将requiresSSL 属性设置为true 以便浏览器仅在连接处于SSL 下时才发送cookie 并且显然确保
  • 如何在单击 Html.ActionLink 时加载部分视图?

    有人可以告诉我如何加载吗PartialView单击时在同一页面中Html ActionLink 我在下面列出了我的要求 我有一个索引页面 它将列出 员工 表中的员工 表中的每一行还将有 编辑和删除 链接 Html ActionLink 来更
  • 如何将 Activator.CreateInstance 与字符串一起使用?

    在我的反射代码中 我的通用代码部分遇到了问题 特别是当我使用字符串时 var oVal object Test var oType oVal GetType var sz Activator CreateInstance oType oVa
  • 是一对一的关系不好的策略

    用户始终拥有一个钱包 一个钱包始终属于一位用户 由于我想分离与钱夹相关的属性 我创建了 Wallet 对象并能够跟踪钱交易 我创建了 public Wallet Entity
  • 当文件已存在时无法创建该文件

    我正在使用 Winforms 并且尝试将文件从一个位置复制到另一个位置 如果同名文件已经存在 我想覆盖它 但我收到类似 当文件已存在时无法创建文件 的错误 我想覆盖该文件 我应该怎么办 我试过File copy代替File move 但我遇
  • 如何使用反应式扩展同时读取交错文件

    我是反应式扩展的新手 我想使用它 在 c 中 来读取包含多个交错流的文件 基本上文件的格式是ABCDABCDABCD 我更喜欢按顺序读取文件并分离流 即AAA BBB 等 并并行处理每个流 为每个流使用单独的线程 必须有某种形式的缓冲来确保
  • MVVM ViewModel 很多属性

    我是 MVVM 新手 正在开发一个应用程序 我有一个包含很多属性的表单视图 大约 50 个 我不能将它们分离到用户控件中 因为这会破坏 mvvm 原则 我无法将它们分成模型 因为它们包含逻辑 属性更改 错误更改这些都不是 poco 类 并且
  • 如何针对 32 位和 64 位安全地从 GetTokenInformation() 调用可变长度结构数组? C#

    我正在关注提供的 pinvoke 代码here https stackoverflow com questions 2146153 how to get the logon sid in c 2146418 2146418但我有点害怕将可变
  • 多线程调试技术

    我想知道是否有人知道多线程应用程序调试技术的一个很好的调查 理想情况下 我正在寻找基于案例的分析 死锁 饥饿 损坏的共享状态 Net 特定的或通用的 我不知道有哪篇文章或书籍可以满足您的需求 因此这是我从 12 年 Windows 多线程调
  • 如何在应用程序目录层次结构中构建接口?

    将它们全部放在一个单独的文件夹结构中还是与实现它们的类一起放置 切勿将接口与实现它们的类放在一起 除非这些类满足以下要求 这样做将引入一个紧耦合在接口和实现者之间 如果不同时引用实现者 您将无法创建该接口的其他实现 你基本上有两个选择 将接
  • 如何添加没有值的属性

    我通过 html 助手和 TagBuilder 生成 HTML 文本框 我们有方法 TagBuilder Attributes Add key value 但对于 HTML5 required 属性不需要传递值 因此如果我传递空字符串 则输
  • MVVM Light Toolkit 抛出 System.IO.FileLoadException

    我正在运行 VS 2010 和 Expression Blend 4 beta 我从提供的模板创建了一个 MVVM Light 项目 当我尝试在 VS 2010 设计器窗口中查看 MainWindow Xaml 时 出现 System IO
  • 用户模式 ​​.NET 设置存储在哪里?

    我想知道 NET 中 settings 文件背后的魔力是什么 假设您创建了一个在此示例中称为的程序集SettingsHolder 您创建一个公共的设置类 其中在用户模式下有一个字符串 然后进行编译 现在 您在 MyApp 中引用您的程序集
  • 如何获取 ASP.NET MVC 中当前的虚拟路径?

    如何从 ASP NET MVC 视图中获取当前路径 URL 如果没有办法将其获取到视图中 那么如何将其获取到控制器中以便将其传递到视图呢 EDIT 我不需要 url 的协议和主机部分 这将为您返回视图中的 url
  • 框架中有通用的交换方法吗?

    框架中是否存在这样的方法 public static void Swap
  • 如何通过ConfigurationManager找到配置文件位置?

    如何通过ConfigurationManager找到配置文件位置 我在代码中有 ConfigurationManager 类 并且正在调试它 我想知道它指向哪个配置文件 web config 或 app config 等 Configura

随机推荐