Cie*_*iel 15 ninject asp.net-core-mvc
我一直很愉快地使用Ninject现在很长一段时间,我真的很喜欢它,但我面对的,因为释放一个艰难的选择ASP.NET 5和MVC 6.
基本上,微软已经发布了自己的依赖注入系统; 据我所知,这引起了很多批评.但我更大的问题在于它如何影响其他图书馆.
从我在网上提出的另一个问题和其他资源来看,似乎Ninject不能与MVC 6一起开箱即用.尽管有一个以详细库形式给出的"解决方案" Microsoft.Framework.DependencyInjection.Ninject and Ninject.这甚至比较棘手,因为该库需要添加https://www.myget.org/F/aspnetmaster/到您的NuGet提要列表中.
我做了一些挖掘,发现这个图书馆的托管地点; 它看起来不错,它似乎可以从我能说的工作中得到解决,但有一些事情让我感到困扰.
基本上,我非常担心这是某种乐队助手,对Ninject(甚至其他容器库)的支持正在消失.是否有一些隐藏的信息,我只是没有发现?
Ste*_*ven 43
现有DI库的维护者之间正在讨论是否构建,维护和支持新的ASP.NET内置DI系统的适配器.Autofac维护者已确认他们将创建并支持适配器,而Ninject团队一直保持沉默,而其他团队(如Simple Injector团队(包括我))已经解释说他们不支持适配器.
就个人而言,我认为ASP.NET Core内置的DI库是一个漂亮而干净的DI库,但它仅限于简单的应用程序.正如我在此解释的那样,不支持开发围绕SOLID原则构建的可维护应用程序所需的许多功能.然而,就像几年前的Unity DI库一样,我认为这个内置容器实际上可能会触发开发人员开始使用依赖注入,这对我们的行业来说是一个胜利.
这些限制使内置容器特别适合配置和扩展ASP.NET系统本身.要构建大型可维护应用程序,您需要使用不同的DI库.这当然很好; 你必须为这份工作挑选合适的工具.
不幸的是,到目前为止,ASP.NET团队已公开表示使用不同的DI库,意味着您必须编写/使用适配器.不幸的是,这是IMO的错误信息,因为大多数DI库与内置容器提供的API不兼容(正如我在此处和此处详细解释的那样).只有Autofac似乎合理地同步,这解释了为什么Autofac团队选择维护适配器.但请注意,即使Autofac已被证明与Microsoft定义的抽象不兼容,它们(就像StructureMap一样)必须对其产品进行重大更改,以便能够遵循抽象.而Autofac维护者则非常沮丧关于整个过程和一般的抽象.正如我在这里解释的那样,即使是ASP.NET提供的Ninject适配器实现也被打破了.
ASP.NET团队使用适配器的这条消息是IMO的一个大错误,因为这会扼杀创新(而DI库本身却没有;它只是另一个DI库).ASP.NET团队正在推广一个模型,其中您的应用程序组件和ASP.NET系统(以及将来将插入的所有其他子系统)将在您的自定义容器中注册.这是更合理和实用,让您的应用程序配置从ASP.NET系统的配置单独的(如解释在这里).
因此,我发现适用于任何容器的适配器都相当无用.正如我在这里所示,插入自己的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上运行." 资源
所以简而言之,我不确定支持'正在消失',尽管一些DI维护者(例如Simple Injector团队,可能还有Castle Windsor和Ninject)已选择不构建,维护和支持适配器ASP.NET Core的实现,因为它不是必需的,而且只是在路上.
2016年11月更新
我一直在讨论使用Microsoft对ASP.NET Core的一些改进,以便更容易插入没有适配器的容器(看看我的示例存储库,特别是Ninject示例项目的Startup.cs)但是到目前为止,微软似乎停滞不前,因为(正如福勒所说的那样)他们" 偏向于使用符合容器 [ 偏向于他们的视觉"].
- 图书馆似乎并没有真正由Ninject创作者领导
这个库,看起来似乎也是这样,看起来是微软创建的在beta7中删除的依赖注入提供程序的样本.请注意,原始问题引用的MVC 6中DI的链接如下所示;
这些DI容器适配器是临时的,可供参考; 我们希望它们最终会被相应的集装箱所有者拆除并取而代之.
应该如此.Microsoft不应负责维护第三方提供商.
- 图书馆深埋在一个不起眼的存储库中
如果您不知道,ASP.NET 5仍处于开发阶段.Beta 7可作为预发布版在nuget上使用,但还有其他来源,包括:
这些来源由Microsoft维护.
- 网上的实际Ninject资源从未提及过
与任何新开发一样,第三方库提供商必须自己确定何时(如果有的话)他们将提供支持新代码库的产品实现.对于某些人来说,等待新框架正式发布将被认为是最有效的,因为在此之前仍然很可能发生API中断更改.是否将实施支持当然取决于提供者资源,和/或在开源社区的情况下.
| 归档时间: |
|
| 查看次数: |
4941 次 |
| 最近记录: |