所以
// this doesn't work or make sense
services.AddScoped<IReadSomething>(sp => new Something());
services.AddScoped<IWriteSomething>(sp => new Something());
因此,对于同一个类,我有两个接口IReadSomething
和IWriteSomething
,该类仅为Something
。
它们需要确定范围,因为它们会将数据的子集从HttpContext
传输到独立于框架的任意“ DTO”。
它们都应引用Something
的相同实例,显然一个实例仅公开一些读取操作,而另一个实例则公开一些写入操作。因此,它被写入了中间件管道中的某个位置-应用程序的其余部分可以仅使用IReadSomething
并读取数据,从而可以减轻意外的数据覆盖。
正在做
services.AddScoped<IReadSomething, Something>();
services.AddScoped<IWriteSomething, Something>();
也没有意义,因为很正确,它应该为每个接口创建一个新实例。
要使接口隔离和作用域依赖性解析一起工作,我缺少什么?我感觉我不得不担心ASP.NET Core作用域服务工厂之类的事情吗?
我也正在使用structuremap来实现主要的依赖项解析-因此可以用一个答案很好。
答案 0 :(得分:8)
使目标类具有作用域,然后将其与所需的接口关联
services.AddScoped<Something>();
services.AddScoped<IReadSomething>(sp => sp.GetService<Something>());
services.AddScoped<IWriteSomething>(sp => sp.GetService<Something>());
这样,对任一接口的调用将在范围内返回相同的实例