.NET-替换由DI作为单例注入的对象

问题描述

我的DI服务提供商已进行以下注册:

services.AddScoped<IProducer,Producer>();
services.AddScoped<IConsumer,Consumer>();
services.AddSingleton<IProduct>(new Product(){Prop1 = "Value 1"});
services.AddSingleton<IFinisherService,FinisherService>();

然后,我通过以下方式在应用程序中的某处使用这些服务(我注入了,但实际上并未在构造函数中使用finisherService,这只是出于说明目的):

Producer(IProduct product,IFinisherService finisherService)
{
var finishedProduct = finisherService.FinishAsync(product);

product.Prop2 = finishedProduct.Prop2;
product.Prop3 = finishedProduct.Prop3;
//...
product.PropN = finishedProduct.PropN;
}
Consumer(IProduct product)
{
  propN = product.PropN;
}

这很好,但是做这样的事情要简单得多(同样,在构造函数中只是为了说明):

Producer(IProduct product,IFinisherService finisherService)
{
  product = finisherService.FinishAsync(product);
}

这不起作用,因为“完成” product仅在Producer范围内可见。 DI向行下方的Product注入的Consumer仍然为空Prop2 ... PropN。我在想,可以将ServiceProvider注入我的Producer中,但是我甚至不确定IOC在构建之后是否可以修改。有更好的模式吗?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...