使用 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();
所以我有一个 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();