我有ReadModelRepository一个依赖于(但不拥有)一次性类实例的非一次性类ReadModelDbContext。在 aModule中,我想配置我的 Autofac 3.0.2 容器,以便ReadModelDbContext仅在ReadModelRepository创建对象时解决(每个依赖项一个实例)。
这是我目前拥有的:
builder.RegisterType<ReadModelRepository>().As<IReadModelRepository>();
builder.Register(c => new ReadModelDbContext(_connectionStringName)).AsSelf();
但是,我不希望任何任意类都能够ReadModelDbContext使用模块提供的注册来解析。实际上,其他类可能需要解析不同的ReadModelDbContext实例。
为了解决这个问题,我可以使用WithParameter,如以下代码段所示:
builder
.RegisterType<ReadModelRepository> ().As<IReadModelRepository> ()
.WithParameter (
(p, c) => p.ParameterType == typeof (ReadModelDbContext),
(p, c) => new ReadModelDbContext (_connectionStringName));
但是,我还需要 Autofac 在解析(或实际上是其解析组件ReadModelDbContext的)生命周期范围结束时自动处理。ReadModelRepository使用WithParameter,这似乎不起作用。
因此,从本质上讲,我只想在外部组件的上下文中注册一个依赖项,并在Dispose最外部组件的生命周期范围结束时调用。这可能吗?