AspNet Core 作用域依赖接口隔离

AspNet Core Scoped Dependency Interface Segregation

所以,

// this doesn't work or make sense
services.AddScoped<IReadSomething>(sp => new Something());
services.AddScoped<IWriteSomething>(sp => new Something());

所以我有两个接口用于相同的 Class、IReadSomethingIWriteSomething,Class 只是 Something

它们需要限定范围,因为它们将数据子集从 HttpContext 传输到独立于任意框架的 'DTO'。

它们都应该引用 Something 的同一个实例,显然一个只公开了一些读取操作,另一个公开了一些写入操作。所以它被写在中间件管道的某个地方——应用程序的其余部分可以只使用 IReadSomething 和读取数据,这样我们就可以减少意外数据覆盖。

正在做,

services.AddScoped<IReadSomething, Something>();
services.AddScoped<IWriteSomething, Something>();

也没有意义,因为很正确,它应该为每个接口创建一个新实例。

我缺少什么让接口隔离和作用域依赖解析一起工作 - 我觉得我必须担心 ASP.NET 核心作用域服务工厂什么的?

我也在使用 structuremap 来解决我的主要依赖关系 - 所以使用它的答案很好。

使目标 class 范围化,然后将其与所需的接口相关联

services.AddScoped<Something>();
services.AddScoped<IReadSomething>(sp => sp.GetService<Something>());
services.AddScoped<IWriteSomething>(sp => sp.GetService<Something>());

这样,对任一接口的调用将 return 范围内的相同实例