AspNet Core Scoped依赖接口隔离

问题描述 投票:3回答:1

所以,

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

所以我有两个接口用于同一个类,IReadSomethingIWriteSomething,Class只是Something

它们需要作用域,因为它们将数据的子集从HttpContext传输到任意框架独立的“DTO”。

它们都应该引用相同的Something实例,显然只是暴露了一些读取,而另一些只是暴露了一些写入操作。所以它被编写在Middleware管道中的某个地方 - 应用程序的其余部分可以只使用IReadSomething并读取数据,这样我们就可以减少意外的数据覆盖。

这样做,

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

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

我想让Interface Segregation和Scoped Dependency Resolution协同工作让我感到失望 - 我觉得我不得不担心ASP.NET Core Scoped Service Factory还是什么?

我也使用结构图作为我的主要依赖性解析 - 所以使用它的答案很好。

c# asp.net-core dependency-injection structuremap
1个回答
8
投票

使目标类作用域,然后将其与所需的接口关联

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

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

© www.soinside.com 2019 - 2024. All rights reserved.