Я использую ASP.MVC 4
и Autofac
.Как вводить HttpContextBase с использованием Autofac в ASP.NET MVC 4
Я зарегистрировал следующее в моем global.asax.cs
файле:
ContainerBuilder builder = new ContainerBuilder();
builder.Register(c => c.Resolve<HttpContextBase>().Request)
.As<HttpRequestBase>()
.InstancePerHttpRequest();
builder.Register(c => c.Resolve<HttpContextBase>().Response)
.As<HttpResponseBase>()
.InstancePerHttpRequest();
builder.Register(c => c.Resolve<HttpContextBase>().Server)
.As<HttpServerUtilityBase>()
.InstancePerHttpRequest();
builder.Register(c => c.Resolve<HttpContextBase>().Session)
.As<HttpSessionStateBase>()
.InstancePerHttpRequest();
builder.RegisterControllers(Assembly.GetExecutingAssembly());
builder.RegisterType<WebWorkContext>().As<IWorkContext>().InstancePerHttpRequest();
В моем главном контроллере у меня есть это (только для целей тестирования):
private readonly HttpContextBase httpContext;
public HomeController(HttpContextBase httpContext)
{
this.httpContext = httpContext;
}
Я использовал тот же самый код с ASP.NET MVC 3, и он работал нормально. Теперь в этом проекте возникают ошибки. Не знаете почему? Ошибка, я получаю это:
Ни один из конструкторов не найдено с «Autofac.Core.Activators.Reflection.DefaultConstructorFinder» на «типа MyProject.Web.Controllers.HomeController» может быть вызвана с помощью имеющихся услуг и параметров : Не удается разрешить параметр «System.Web.HttpContextBase httpContext» конструктора «Void .ctor (System.Web.HttpContextBase)». на Autofac.Core.Activators.Reflection.ReflectionActivator.ActivateInstance (контекст IComponentContext, IEnumerable 1 parameters) at Autofac.Core.Resolving.InstanceLookup.Activate(IEnumerable
1 параметр) в Autofac.Core.Resolving.InstanceLookup.Execute() в Autofac.Core.Resolving.ResolveOperation.GetOrCreateInstance (ISharingLifetimeScope currentOperationScope, регистрация IComponentRegistration, IEnumerable 1 parameters) at Autofac.Core.Resolving.InstanceLookup.ResolveComponent(IComponentRegistration registration, IEnumerable
1 параметр) в Autofac.Core.Registration.ExternalRegistrySource. <
Я не слишком уверен, почему это не сработает? Нужно ли мне делать что-то по-другому в ASP.NET 4?
У меня есть отдельный проект, в котором я также хочу ввести HttpContextBase
, и я получаю ту же ошибку.
Я не вижу в вашем коде, где вы зарегистрировать 'HttpContextBase' сам ... Попробуйте зарегистрировать' 'AutofacWebTypesModule' с builder.RegisterModule (новый AutofacWebTypesModule());' – nemesv
Да, я только что видел это сейчас на своем веб-сайте. Я регистрирую 'AutofacWebTypesModule' прежде, чем я буду делать builder.Register (c => c.Resolve(). Request)' ..? –
В этом случае регистрационный заказ не должен иметь значения. – nemesv