我在 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”匹配的标记的范围。这通常表明注册为 per-HTTP 请求的组件正在被 SingleInstance() 组件(或类似场景)请求。在 Web 集成下,始终从 DependencyResolver.Current 或 ILifetimeScopeProvider.RequestLifetime 请求依赖项,而不是从容器本身.
我怎样才能让它工作?我之所以想要这种方式是因为工作上下文处理诸如获取当前客户之类的事情。
还有一些问题。一次注册是否明智/最佳做法?我需要在另一个阶段添加更多组件的情况吗?