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

Use one instance in multiple components with Autofac

所以我有一个 IApplicationDbContext class 和一个 ApplicationDbContext class 来实现它。在我编写的代码中,我使用 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 实例。最后只有一个实例,但它被用于多种类型。我能以某种方式做到这一点吗?

一个注册可以针对多个服务。我会推荐这样的东西:

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