【发布时间】:2012-04-05 11:00:49
【问题描述】:
我在 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 请求依赖项,而不是从容器本身.
如何让它工作?我之所以想要这种方式是因为工作上下文处理诸如获取当前客户之类的事情。
还有一些问题。一次注册是否明智/最佳做法?是否会是我需要在另一个阶段添加更多组件的场景?
【问题讨论】:
-
你想在哪里做你的决议?
-
我只是在玩,所以这是在应用程序启动方法中构建容器后直接完成的。我不知道如何在我的应用中的其他位置获取容器?
标签: c# asp.net-mvc-3 dependency-injection autofac