Я зарегистрировал подобный компонент в моем Global.asax.cs:
ContainerBuilder builder = new ContainerBuilder();
builder.RegisterControllers(Assembly.GetExecutingAssembly());
builder.RegisterType<WebWorkContext>().As<IWorkContext>().InstancePerHttpRequest();
IContainer container = builder.Build();
DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
// This is where my error happens, not sure why?
var workContext = container.Resolve<IWorkContext>();
WebWorkContext
класс:
public class WebWorkContext : IWorkContext
{
// Left out other code
}
IWorkContext
интерфейс:
public interface IWorkContext
{
// Left out other code
}
Ошибка, которую я Я получаю:
Ни одна область с тегом, соответствующим «httpRequest», не видна из области, в которой экземпляр был запрошен.Обычно это указывает на то, что компонент, зарегистрированный как HTTP-запрос, запрашивается компонентом SingleInstance() (или аналогичным сценарием). При веб-интеграции всегда запрашивайте зависимости от DependencyResolver.Current или ILifetimeScopeProvider.RequestLifetime, а не от самого контейнера. .
Как заставить это работать? Причина, по которой я хочу этого, заключается в том, что рабочий контекст обрабатывает такие вещи, как получение текущего клиента и т. д.
Еще несколько вопросов. Разумно ли/лучше всего регистрироваться сразу? Будут ли сценарии, в которых мне нужно будет добавить дополнительные компоненты на другом этапе?