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、IReadSomething
和 IWriteSomething
,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 范围内的相同实例
所以,
// this doesn't work or make sense
services.AddScoped<IReadSomething>(sp => new Something());
services.AddScoped<IWriteSomething>(sp => new Something());
所以我有两个接口用于相同的 Class、IReadSomething
和 IWriteSomething
,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 范围内的相同实例