我想在通用控制器中使用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;
为什么在运行时显示错误?
答案 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);
}
答案 1 :(得分:0)
显示的错误指出,由于缺少依赖项而未创建控制器。因此,您所显示的行甚至根本没有被调用。创建控制器时,错误会在此之前发生。
特别是,您期望一个UserAgentHelper
的实例,但是Autofac不知道如何获取它。服务依赖项应通过其接口请求。
简而言之,您应该要求使用IUserAgentHelper
,而不是UserAgentHelper
。