在Autofac的多个组件中使用一个实例

本文关键字:实例 一个 Autofac 组件 | 更新日期: 2023-09-27 17:50:20

所以我有一个IApplicationDbContext类和一个ApplicationDbContext类来实现它。在我写的代码中,我使用IApplicationDbContext,但更高的链MVC使用ApplicationDbContext,我不能真正改变这一点,所以目前我已经注册了这样的组件:

builder.RegisterType<ApplicationDbContext>()
       .AsSelf()
       .InstancePerRequest();
builder.RegisterType<ApplicationDbContext>()
       .As<IApplicationDbContext>()
       .InstancePerRequest();

这并不理想,因为我实际上有两个相同事物的实例。有可能这样做吗?

var dbContextInstance = new ApplicationDbContext();
builder.RegisterInstance(dbContextInstance)
       .As<ApplicationDbContext>()
       .InstancePerRequest(); 
builder.RegisterInstance(dbContextInstance)
       .As<IApplicationDbContext>()
       .InstancePerRequest();

因此,每当构造函数需要ApplicationDbContext时,它使用ApplicationDbContext实例,每当它请求IApplicationDbContext时,它得到相同的ApplicationDbContext实例。最后只有一个实例,但它用于多种类型。我能做到吗?

在Autofac的多个组件中使用一个实例

一个注册可以针对多个服务。我建议这样写:

builder.RegisterType<ApplicationDbContext>()
       .AsSelf() 
       .As<IApplicationDbContext>()
       .InstancePerRequest();