- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我一直很高兴使用Ninject
很长一段时间以来,我真的很喜欢它,但自从ASP.NET Core
发布以来,我面临着一个艰难的选择。和 MVC Core
.
基本上,微软已经公开了他们自己的依赖注入(inject)系统;据我所知,哪一个受到了很多批评。但我更大的问题在于它如何影响其他图书馆。
来自 another question I asked和 other resources online ,似乎 Ninject 不能与 MVC Core 一起开箱即用。尽管以详细库的形式给出了“解决方案”Microsoft.Framework.DependencyInjection.Ninject and Ninject
.这更加棘手,因为该库需要添加 https://www.myget.org/F/aspnetmaster/
到您的列表 NuGet 饲料。
我已经做了一些挖掘,找到了这个库的托管位置;看起来不错,据我所知,它似乎可以正常工作,但是有一些事情困扰着我。
最佳答案
现有 DI 库的维护者之间正在讨论是否为新的 ASP.NET 内置 DI 系统构建、维护和支持适配器。 Autofac 维护人员有 confirmed 表示他们将创建并支持适配器,而 Ninject 团队一直是 silent ,而其他团队(例如 Simple Injector 团队(包括我)) have explained 表示他们不会支持适配器。
个人认为 ASP.NET Core 内置的 DI 库是一个漂亮干净的 DI 库,但仅限于简单的应用程序。正如我解释的 here ,不支持开发围绕 SOLID 原则构建的可维护应用程序所需的许多功能。然而,就像几年前 Unity DI 库所做的那样,我认为这个内置容器实际上可能会触发开发人员开始使用依赖注入(inject),这对我们行业来说是一个胜利。
这些限制使得内置容器特别适合配置和扩展 ASP.NET 系统本身。要构建大型可维护应用程序,您将需要使用不同的 DI 库。这当然很好;您必须为工作选择合适的工具。
不幸的是,到目前为止,ASP.NET 团队已经告知 publicly 使用不同的 DI 库,这意味着您必须编写/使用适配器。不幸的是,这是 IMO 的错误信息,因为大多数 DI 库与内置容器提供的 API 不兼容(正如我详细解释的 here 和 here)。只有 Autofac 看起来合理同步,这就解释了为什么 Autofac 团队选择维护一个适配器。但请注意,即使 Autofac 已被证明与 Microsoft 定义的抽象不兼容,并且他们(就像 StructureMap 一样)必须在他们的产品中添加 big changes 才能符合抽象。 Autofac 的维护者对整个过程和一般的抽象都很关注。正如我所解释的 severely frustrated ,即使是 ASP.NET 提供的 Ninject 适配器实现也被破坏了。
ASP.NET 团队使用适配器的消息是 IMO 一个大错误,因为这扼杀了创新(而 DI 库本身没有;它只是另一个 DI 库)。 ASP.NET 团队正在推广一种模型,在该模型中,您的应用程序组件和 ASP.NET 系统(以及将来会插入的所有其他子系统)都将在您的自定义容器中注册。将应用程序配置与 ASP.NET 系统的配置分开更合理和实用(如 here 所述)。
正因为如此,我发现为任何容器使用适配器都是无用的。正如我向 here 展示的那样,插入你自己的 DI 容器真的很容易,同时保持它与 ASP.NET 的注册完全分开。这意味着您不需要支持 Ninject 就能够在 ASP.NET Core 项目上有效地使用 Ninject。 Ninject 唯一需要做的就是创建一个与 .NET Core 兼容的版本(以防您的产品需要在该新平台上运行)。
更新 :“Ninject 3.3.0 于 2017 年 9 月 26 日发布,现在针对 .NET Standard 2.0,因此也可以在 .NET Core 2.0 上运行。” here
所以简而言之,我不确定支持“正在消失”,尽管一些 DI 维护者(例如 Simple Injector 团队,可能还有 CaSTLe Windsor 和 Ninject)选择不构建、维护和支持适配器ASP.NET Core 的实现,因为它不是必需的,而且只是妨碍。
2016 年 11 月更新
我一直在 source 与 Microsoft 一起使用 ASP.NET Core,以便更轻松地插入没有适配器的容器(看看我的 discussing some improvements ,尤其是 example repository ),但直到现在,Microsoft 似乎都在停滞不前,因为(正如福勒自己所说)他们的“Startup.cs of the Ninject sample project [is] 遮蔽了[他们的] 愿景”。
关于ninject - ASP.NET Core MVC 中是否继续支持 Ninject?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32788637/
我的 processmaker 安装遇到了一些问题。我正在尝试使用本指南 [url]http://wiki.processmaker.com/index.php/ProcessMaker_Ubuntu
我正在使用 ShareKit。发送 SMS 消息使用 MFMessageComposeViewController,用户看到标题“文本”。我想将该标题更改为更能反射(reflect)实际可用内容的内容
我需要在我的一个针对 Gingerbread 的 Android 应用程序中使用操作栏和 fragment 的组合。所以我使用了 v7 支持库中的操作栏和 v4 支持库中的 fragment ,并使用
我明白为什么浏览器 vendor 不想帮助我阻止他们的 UI 线程。但是,我不明白为什么会有: Web Workers 中没有 sleep (2) 没有同步 WebSockets API 有一个syn
最近我的组织正在考虑使用 Docker。我们组使用的是cloudera CDH 5.1.2。 1) cloudera 是否与 Docker 容器兼容?2) docker 和cloudera 组合是否存
我正在尝试通过编译在 Mac 上安装 rsync 3.2.3。但是,我想安装所有功能。为此,它需要一些库,此处 ( https://download.samba.org/pub/rsync/INSTA
我一直在使用 PyDev 成功运行 nose 测试,并想试试 nose2。 所以我安装了它 pip install nose2 复制/粘贴来自 http://nose2.info/ 的示例代码进入名为
我想知道 LLVM 中是否有任何函数/方法可以在 LLVM IR 中添加 Open-MP 构造。 llvm-3.0 是否仍然支持 OpenMP 指令? 最佳答案 OpenMP 是一种高级语言扩展。因此
我对 CUDA 编程非常陌生。我正在浏览 SDK 附带的示例。我能够编译代码,但是当我运行它时,出现以下错误: "clock.cu(177) : CUDA Runtime API error 38:
RStudio 是用于 R 开发的出色 IDE。我想知道是否有任何方法可以很好地支持 HiDPI 分辨率? 我目前有 13 英寸显示器和 3200x1800 分辨率,甚至很难阅读 RStudio 选项
我正在寻找一种有助于为 Django 项目提供 RDF 支持的工具。 到目前为止,我发现了两个: django-rdf - 最后一次修改是在 4 年前,所以它看起来像是一个死项目。 djubby -
我刚刚尝试了一些 JS 核心原则,发现引擎评估链接的关系运算符而不会引发错误。相反,他们以我自己无法理解的方式进行评估。 console.log(1 4 > 3 > 2 > 1); //false,
我知道 etexteditor 和 vim/emacs。 是否有任何其他 Windows 编辑器支持类似 textmate 的片段(例如,您编写触发词,按 Tab,它更改为某些内容,再次按 Tab,它
我正在尝试找出验证给定集群的网络策略配置的最佳方法。 According to the documentation Network policies are implemented by the ne
很难说出这里问的是什么。这个问题是含糊的、模糊的、不完整的、过于宽泛的或修辞性的,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开它,visit the help center 。 已关
Z3 会支持 AUFBV 吗? 对于以下脚本: (set-logic AUFBV) (declare-fun x () (_ BitVec 16)) (declare-const t (Array (
使用分部类编写 NUnit 测试的优缺点是什么? 我要开始了: 亲:可以测试私有(private)方法 缺点:TDD 不再可能了 还有什么? 最佳答案 缺点:要么您必须测试与您发布的版本不同的构建,要
它很容易(对于 90% 的 aop 特性)在没有任何语言本身支持的情况下做到这一点,就像大多数动态语言如 python 和 ruby 一样。然而,Dojo在 1.3.2 上直接支持它.最新版本发生
我在我的 android 应用程序中使用亚洲字符,我已经了解到某些字符无法显示,因为系统字体不支持它们。我查询了一个包含亚洲字符的数据库,并且经常检索到无法显示的标志。这些情况对我的应用程序来说通常不
你好,我想实现一个控件,我想在用户键入@字符时启用该控件,直到未填充运行文本中的空格为止,它应该显示用户列表,@符号后键入的文本应该显示基于键盘字符的建议,就像我们在上面看到的那样Twitter 或
我是一名优秀的程序员,十分优秀!