- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在开始新的Prism.Forms
项目,我想知道各种 IoC
中的哪一个容器( Autofac
、 Dryloc
、 Ninject
或 Unity
)最好继续使用。
我不知道这是否属实,但我在某处读到 Unity 不再处于积极开发状态,因为这和 MEF
是唯一的IoC
我曾经使用过的容器我不确定它是否适合我。
同时,我对Autofac
知之甚少或一无所知。 , Dryloc
或 Ninject
.
请在任何建议中保持客观,提供您认为某个比其他更好的原因,而不是简单地“我使用 xxx”;我想做出明智的决定。
最佳答案
我能做的最好的事情就是按照目前的情况排列事实。
注意:自从我在 2017 年第一次回答这个问题以来,发生了很多变化。以下信息一直在更新,应该可以帮助您对项目做出决定。但是请注意,您现在还可以使用 Prism.Container.Extensions,因为它支持抽象许多非常强大的注册方法,包括工厂,以及将单个实现注册为不同服务的单例的能力。可以在那里添加额外的容器。其他文档可以在 https://prismplugins.com 中找到。
支持的容器
这些是 Prism 团队正式发货的容器
DryIoc
这是我使用和推荐最多的容器。它正在积极开发中,速度非常快,并且与 Prism 的当前版本配合得很好。同样重要的是,当我有疑问或问题时,维护者会非常迅速地解决问题或回答我的问题。 Dadhi 也非常擅长主动为 Prism 集成提供增强功能。出于所有这些原因,我继续推荐容器。与 Unity 不同的是,API 往往非常稳定,我还没有遇到过将 DryIoc 更新到超出特定 Prism 版本目标的问题。
统一容器
不要与 Unity 游戏开发平台混淆。这是最受欢迎的容器,因为它是 Brian 使用多年的容器,并且它是模板中第一个(并且很长一段时间内唯一)可用的容器。它已经有一段时间没有维护了,但是该项目确实有一个新的维护者。值得注意的是,Unity 5 中有许多重大更改,这使得使用 Prism 6.3 升级到 Unity 5 变得不可能。然而,Prism 7 的所有平台上的 Prism 都更新到了 Unity 5。就其基准性能而言,Unity 也处于平均水平。对于从 Prism 6.X 升级到 Prism 7 的用户,请注意您应该卸载对 Unity 或 Common Service Locator 的任何引用,然后更新 Prism.Unity.Forms,它现在面向 Unity.Container NuGet 包而不是 Unity NuGet 包。您还应该注意,针对比 Prism 所针对的更新版本的 Unity 可能会破坏您的应用程序,因为 Unity 引入了许多重大更改,但没有从 Minor Patch 到 Minor Patch 的解释或文档。
非官方支持
这些是提供非官方软件包的容器。这些可能对您有用,也可能不适合,风险由您自行承担。
Microsoft.Extensions.DependencyInjection
Prism 需要某些特性,例如 Microsoft DependencyInjection 模式不支持的可变性和命名服务。然而,有一个实现可以为 Prism.Container.Extensions 项目中的所有 Prism 应用程序/平台提供通用支持。
生命周期结束/弃用的容器
虽然这些容器多年来已在许多项目中使用,但 Prism 团队不再支持以下容器。
汽车制造商
尽管很受欢迎,但我通常会建议不要使用容器。人们似乎对 API 感到非常困惑。在 Prism 6.3 中,它的实现非常糟糕。可悲的是,为了提高性能,Autofac 团队非常坚决地决定让容器不可变。从 Prism 7.1 开始,Prism 正式放弃了对这个容器的支持。
宁捷
Ninject 长期以来一直是使用最少的容器之一。随着团队转向支持 netstandard,它在 7.0 中从 Prism.Forms 中删除。虽然 Ninject 3.3 在技术上确实附带了 netstandard2.0 api,但它与 Xamarin 目标不兼容。它目前也处于非常不健康的状态,从 2017 年 11 月发布了最新的 3.3 版本,从 2016 年 8 月发布了最新的 4.0 预览版。
更新
值得注意的是,从 Prism 7 的 Preview 5 开始,我们已经对容器进行了抽象。这最终将使在您选择的容器之间切换变得更加容易,因为 API 在如何注册您的服务和 View 方面完全相同。您仍然可以通过扩展方法访问 Container,在 Autofac 的情况下,您可以访问 ContainerBuilder,以便您可以完成更复杂的注册。
// Prism 6.X way of Registering Services
protected override void RegisterTypes()
{
// Container Specific Registrations
// Autofac
Builder.RegisterType<DebugLogger>().As<ILoggerFacade>().SingleInstance();
// DryIoc
Container.Register<ILoggerFacade, DebugLogger>(reuse: Reuse.Singleton,
ifAlreadyRegistered: IfAlreadyRegistered.Replace);
// Ninject
Container.Bind<ILoggerFacade>().To<DebugLogger>().InSingletonScope();
// Unity
Container.RegisterType<ILoggerFacade, MCAnalyticsLogger>(new ContainerControlledLifetimeManager());
}
// Unified API in Prism 7
protected override void RegisterTypes(IContainerRegistry containerRegistry)
{
containerRegistry.RegisterSingleton<ILoggerFacade, DebugLogger>();
}
关于xamarin.forms - 哪个 IoC 容器更适合 Prism.Forms,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43664455/
我的设置.py: LANGUAGE_CODE = 'de' TIME_ZONE = require_env("TIME_ZONE_IDENTIFIER") USE_I18N = True USE_L1
谁能给我解释一下 Django 的 forms.Form 和 forms.ModelForm 的相同点和不同点? 最佳答案 从 forms.Form 创建的表单由您手动配置。您最好将这些用于不直接与模
我在用 angularjs 构建的表单上遇到此错误。 `错误:[$compile:multidir] 多个指令 [form, form] 请求 'form' Controller :
我是 Spring 的新手,在尝试显示表单错误时遇到了一些麻烦。 我有以下表格: User Name:
我希望在提交表单时找出 spring:bind 和 form:form 标记库之间的区别。 我的 JSP 片段如下: ....
类型‘AbstractControl’上不存在属性‘Controls’。
有一个问题与此非常相似,但我想以不同的方式提出。 我是一个非常自定的人,但有时我确实喜欢走捷径。就这样吧。 我确实发现这两个类非常相似,尽管其中一个“帮助”程序员更快地编写代码或减少代码/重复代码。将
我在控制台中收到此错误。 “表单提交已取消,因为表单未连接” 自从我们将应用程序迁移到更新版本的 React 后,尝试将我的 redux-form 从 v5 迁移到 v6 之后。 我不确定这里出了什么
我想要的是一个表单,在提交时运行验证检查,并突出显示所有无效字段并添加工具提示。 我正在有效地寻找这样的东西: dojo.forEach(dijit.byId('myForm')._invalidWi
我需要设置symfony2表单元素的值。 我在 Controller 操作中使用了doctrine2实体, Symfony\Component\Form\AbstractType 和createFor
这是用于将数据提交到自定义列表的自定义 Editform.aspx。用户完成表单后,他应该能够点击按钮甚至“确定”按钮,并让 sharepoint 将表单数据提交到列表,然后重定向到项目显示表单 (d
我想知道在 spring 标签中编写所有表单是否是一种好习惯,或者我可以将 spring 表单标签与 html 表单标签混合使用吗? 最佳答案 当您需要 Spring 表单提供的功能时使用它们: 绑定
我正在构建动态表单并希望“即时”添加表单组。 这是我的代码,几乎可以工作: import {Component, OnInit} from '@angular/core'; import {FormG
表格 Form.Load 有什么区别? , Form.Shown和 Form.Activated事件?他们被解雇的顺序是什么? 最佳答案 参见 Windows Forms Events Lifecyc
我正在使用具有路线跟踪功能的 Xamarin Forms 开发一些应用程序。尽管我正在使用 AppCenter,即在 App.xaml.cs OnStart 我添加 protected asy
我正在实现一个 gameboy 模拟器,就像我之前的许多人一样。 我正在尝试实现 PPU 并为此使用代表屏幕的类。 // needed because VS can't find it as depe
我是 Orbeon Form 新手,想使用它。不过,我尝试过 Orbeon Form 网站上的 Form 示例,并用泰语输入了一些数据。是的,可以在“泰语”字段中输入数据。但是当我尝试生成“PDF”时
那么让表单一遍又一遍有效地呈现相同表单的最佳方法是什么,并根据实体的属性值有条件地禁用字段? 我有一个发票实体,需要一个用于创建发票的表单,以及在发票流程的各个阶段(生成、发送、支付等)禁用各个字段的
因此,我一直在与我的同事(开发人员和设计人员)就 Web 表单的自动填充工具进行亲切的辩论。这是一个重要的开发问题,因为它会影响表单的构建方式。 问)自动填充工具(例如 Google 工具栏或 Chr
那么让表单一遍又一遍有效地呈现相同表单的最佳方法是什么,并根据实体的属性值有条件地禁用字段? 我有一个发票实体,需要一个用于创建发票的表单,以及在发票流程的各个阶段(生成、发送、支付等)禁用各个字段的
我是一名优秀的程序员,十分优秀!