我们目前在mvc网络应用中使用autofac。
Build() or Update() can only be called once on a ContainerBuilder
每1-4天,我们都会收到上述错误。这让我疯狂。我一直在尝试查看为什么会这样做,但是我无法查明问题所在。
有人可以指出正确的方向。
除非您有需要HttpApplication资源的启动过程,否则建议将应用程序初始化删除为静态构造函数或完全独立的单例。我在Application_Start()
上也遇到过类似的问题,您需要一个只能被调用一次的结构。
我在我的应用程序(.Net Core 3.1)中遇到了同样的事情我想获取容器并解决注册服务。
在.Net Core 3.1中,您不能像以前的版本那样简单地更改Startup.ConfigureServices
方法以返回IServiceProvider
因此,要在启动void Configure(IApplicationBuilder app)
方法调用app.ApplicationServices.GetAutofacRoot()
中获得所需的服务,这将返回ILifetimeScope实例,可用于解析服务
注意。考虑到全局保存此实例不是最佳实践
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
//app middleware registrations
//...
//
ILifetimeScope autofacRoot = app.ApplicationServices.GetAutofacRoot();
var repository = autofacRoot.Resolve<IRepository>();
}