.net core3.1中使用autofac怎么得到IContainer?
时间: 2020-06-25来源:博客园
前景提要
.net core3.1中使用autofac怎么得到IContainer?
0 悬赏园豆: 5 [待解决问题] 如下代码所示使用的是.net core3.1使用的是Autofac框架来做依赖注入
Program.cs public static void Main( string [] args) { // 启动 kestrel 本地调试端口默认配置在 launchSettings.json CreateHostBuilder(args).Build().Run(); } public static IHostBuilder CreateHostBuilder( string [] args) => Host.CreateDefaultBuilder(args) .ConfigureLogging(loggingBuider => { // 配置Log4为log组件 loggingBuider.AddLog4Net( " Config\\Log4net.config " ); // 使用相对路径 }) .UseServiceProviderFactory( new AutofacServiceProviderFactory()) // 设置服务提供者为autofac .ConfigureWebHostDefaults(webBuilder => { // 设置Startup为启动类型 webBuilder.UseStartup<Startup> (); });
Startup.cs     public Startup(IConfiguration configuration) { Configuration = configuration; } public IConfiguration Configuration { get ; } // This method gets called by the runtime. Use this method to add services to the container. public void ConfigureServices(IServiceCollection services) { services.AddControllers( options => { // 注册全局异常处理 options.Filters.Add<ApiExceptionFilterAttribute> (); }); // 通过option获取服务 services.Configure<AppSetting> (Configuration); } /// <summary> /// 使用Autofac在这里注册服务 /// </summary> /// <param name="containerBuilder"></param> public void ConfigureContainer(ContainerBuilder containerBuilder) { containerBuilder.RegisterModule <AutofacRegister> (); // IContainer container= containerBuilder.Build(); // 这里不能Build 不然会报错 } // This method gets called by the runtime. Use this method to configure the HTTP request pipeline. public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } app.UseHttpsRedirection(); app.UseRouting(); app.UseAuthorization(); app.UseEndpoints(endpoints => { endpoints.MapControllers(); }); }
配置好了也能正常使用,但是现在有个问题,之前是.net framework的代码,准备迁移到.net core3.1,很多地方不是使用构造函数注入的方式获取服务的,如
var testService= container.Resolve<ITestService>();
container 是使用的Autofac.IContainer对象,通过 containerBuilder.Build()获取得到的一个对象,然后使用一个静态的对象保存的,现在到了.net core3.1中拿不到
IContainer,有什么办法解决吗?
autofac .net core3.1 依赖注入 爱杨洋真是太好了 | 初学一级 | 园豆: 12
提问于:2020-06-25 21:50 显示帮助
使用"Ctrl+Enter"可进行快捷提交,评论支持部分 Markdown 语法:[link](http://example.com) _italic_ **bold** `code`。
< > 分享
分享您的问题
所有回答(1) 1 // Configure is where you add middleware. This is called after // ConfigureContainer. You can use IApplicationBuilder.ApplicationServices // here if you need to resolve things from the container. public void Configure( IApplicationBuilder app, ILoggerFactory loggerFactory) { // If, for some reason, you need a reference to the built container, you // can use the convenience extension method GetAutofacRoot. this .AutofacContainer = app.ApplicationServices.GetAutofacRoot(); loggerFactory.AddConsole( this .Configuration.GetSection( " Logging " )); loggerFactory.AddDebug(); app.UseMvc(); }
在autofac官网看到这个,AutofacContainer是ILifetimeScope类型的,IContainer继承自ILifetimeScope,看ILifetimeScope名字不确定能不能用单例保存 爱杨洋真是太好了 | 园豆:12 (初学一级) | 2020-06-25 23:44 编辑文本 预览 上传图片
Ctrl+Enter键快速提交
清除回答草稿
您需要 登录 以后才能回答,未注册用户请先 注册 。

科技资讯:

科技学院:

科技百科:

科技书籍:

网站大全:

软件大全:

热门排行