在控制器外使用 Nop 服务?

Use a Nop Service outside of a controller?

我正在编写用于验证 zip\postal 代码的自定义验证属性。为了让它起作用,我绝对需要知道所选的国家/地区。但是做起来却出奇的难

在大多数视图模型中,nop 使用其 id 传递国家/地区,这意味着我需要破译它。这样做的方法是使用 CountryService 因为它可以将 id 转换为国家/地区名称,但问题是我实际上该怎么做。

如果我要创建一个新的 CountryService 对象,我还必须创建并传递一些依赖项(CacheService 对象等),这听起来像是实现结果的错误方法。那么我如何在控制器外部实际使用 Nop 服务(在我的例子中是在自定义验证属性中)?

您不需要创建 对象,而是从服务定位器获取实例。

像这样:

var countryService= EngineContext.Current.Resolve<ICountryService>();

您可以检查 nopCommerce 中的任何属性,例如 WwwRequirementAttribute 并检查它如何使用定位器模式。