Oli*_*r D 1 c# dependency-injection immutability async-await
我的印象是依赖注入对不变性并不友好。我使用Microsoft 依赖注入,但我对另一个依赖注入持开放态度,我希望尽可能多地读取字段/属性,因此有一个构造阶段,然后是 init 阶段,这是最好的解决方案。当我需要创建一个通过互联网获取数据的类时,我的问题出现了,我想要这样的东西:
var services = new ServiceCollection();
services.AddSingleton<IMyWebService, MyWebService>();
services.AddSingleton<IMyOtherService, MyOtherService>(async sp =>
{
var webService = sp.GetService<IMyWebService>();
return new MyOtherService(await webService.GetDataAsync());
});
Run Code Online (Sandbox Code Playgroud)
使其同步将使我的应用程序无响应。
你不能那样做。有一个关于依赖注入的问题在这里很快解释了为什么不:https : //github.com/simpleinjector/SimpleInjector/issues/243
它的要点
注入构造函数应该很简单。这不仅适用于注入构造函数,而且实际上这个建议应该应用于整个图。图形的创建应该快速可靠。执行 I/O 不仅会使它变慢,而且会导致图形由于与接线错误不同的原因而失败,并且在没有此外部系统(在您的情况下是数据库)的可用性的情况下很难验证和诊断图形)。
您可以将服务传递给您的对象并在那里获取数据。这将如何违反不变性?
传递引用并允许您的类只设置一次数据。你有封装来帮助你。