I have registered a component like this in my 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
class:
public class WebWorkContext : IWorkContext
{
// Left out other code
}
IWorkContext
interface:
public interface IWorkContext
{
// Left out other code
}
The error that I am getting is:
No scope with a Tag matching 'httpRequest' is visible from the scope in which the instance was requested. This generally indicates that a component registered as per-HTTP request is being reqested by a SingleInstance() component (or a similar scenario.) Under the web integration always request dependencies from the DependencyResolver.Current or ILifetimeScopeProvider.RequestLifetime, never from the container itself.
How do I get this to work? This reason why I want it this way is because the work context handles stuff like getting the current customer etc.
Some more questions. Is it wise/best practices to register every at once? Will the be scenarios that I will need to add more components at another stage?
See Question&Answers more detail:
os 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…