如何在Nopcommerce 4.2中的通用控制器中使用IsMobileDevice()

时间:2019-06-15 12:41:04

标签: asp.net-mvc asp.net-core-2.1 nopcommerce

我想在通用控制器中使用IsMobileDevice()。但是当我使用这种方法时,它向我显示错误,即

1。激活特定注册期间发生错误。有关详细信息,请参见内部异常。注册:激活器= CommonController(ReflectionActivator),服务= [Nop.Web.Controllers.CommonController],生命周期= Autofac.Core.Lifetime.CurrentScopeLifetime,共享=无,所有权= OwnedByLifetimeScope --->在'Autofac中找不到任何构造函数可以使用可用的服务和参数调用“ Nop.Web.Controllers.CommonController”类型的“ .Core.Activators.Reflection.DefaultConstructorFinder”:

2。无法解析构造函数'Void .ctor(Nop.Core.Domain.Security.CaptchaSettings,Nop.Core.Domain.Common.CommonSettings,Nop.Web.Factories.ICommonModelFactory,Nop.Void.ctor的参数'Nop.Services.Helpers.UserAgentHelper userAgentHelper' Services.Directory.ICurrencyService,Nop.Services.Logging.ICustomerActivityService,Nop.Services.Common.IGenericAttributeService,Nop.Services.Localization.ILanguageService,Nop.Services.Localization.ILocalizationService,Nop.Services.Logging.ILogger,Nop.Core。 IStoreContext,Nop.Web.Framework.Themes.IThemeContext,Nop.Services.Vendors.IVendorService,Nop.Core.IWorkContext,Nop.Services.Messages.IWorkflowMessageService,Nop.Core.Domain.Localization.LocalizationSettings,Nop.Core.Domain。 Common.SitemapSettings,Nop.Core.Domain.Common.SitemapXmlSettings,Nop.Core.Domain.StoreInformationSettings,Nop.Core.Domain.Vendors.VendorSettings, Nop.Services.Helpers.UserAgentHelper)”。

这是我在通用控制器中如何使用此方法的代码行

var mobileDevice = _userAgentHelper.IsMobileDevice();

这是字段

private readonly IHttpContextAccessor _httpContextAccessor;

为什么在运行时显示错误?

2 个答案:

答案 0 :(得分:1)

我刚刚在nopCommerce 4.20中检查了通用控制器中的IsMobileDevice方法及其工作正常, 它将返回true或false, 我已经尝试过使用谷歌浏览器

这是我实现的代码

private readonly IUserAgentHelper _userAgentHelper;
public CommonController(IUserAgentHelper userAgentHelper)
{
  _userAgentHelper = userAgentHelper;
}


public virtual IActionResult ContactUs()
    {
        var model = new ContactUsModel();

        var mobileDevice = _UserAgentHelper.IsMobileDevice();
        if(mobileDevice)
           return true;

        model = _commonModelFactory.PrepareContactUsModel(model, false);
        return View(model);
    }

enter image description here

答案 1 :(得分:0)

显示的错误指出,由于缺少依赖项而未创建控制器。因此,您所显示的行甚至根本没有被调用。创建控制器时,错误会在此之前发生。

特别是,您期望一个UserAgentHelper的实例,但是Autofac不知道如何获取它。服务依赖项应通过其接口请求。

简而言之,您应该要求使用IUserAgentHelper,而不是UserAgentHelper