问题描述
我的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 (将#修改为@)