c# – 服务定位器比依赖注入更容易使用?

c# – 服务定位器比依赖注入更容易使用?,第1张

概述我正在处理的应用程序依赖于Autofac作为DI容器,其中一个原因让我决定使用它,其中包括委托工厂功能(见 here) 这适用于我需要多次重建相同元素的所有情况,如某些报告和相关屏幕的情况.一些报告(甚至那些相同类型的报告)是同时执行的,但它们仅通过用户定义的参数进行更改,因此注入工厂以创建实例,传递免费参数并将其余参数留给应用. 问题在于每个报告由可变数量的子报告(任务)组成,每个任务都实现IT 我正在处理的应用程序依赖于autofac作为DI容器,其中一个原因让我决定使用它,其中包括委托工厂功能(见 here)

这适用于我需要多次重建相同元素的所有情况,如某些报告和相关屏幕的情况.一些报告(甚至那些相同类型的报告)是同时执行的,但它们仅通过用户定义的参数进行更改,因此注入工厂以创建实例,传递免费参数并将其余参数留给应用.

问题在于每个报告由可变数量的子报告(任务)组成,每个任务都实现ITask接口.每个报告最多可以使用50个不同的任务,每个任务都包含一个精确的业务 *** 作.我有一个选择是注入委托工厂并在需要时创建它们.

这些任务必须由工厂动态生成,例如:

var myTaskA = _taskFactoryConcreteTaskA();var myTaskB = _taskFactoryConcreteTaskB();var myTaskC = _taskFactoryConcreteTaskC();...var myTaskZZ = = _taskFactoryConcreteTaskZZ();

需要大量的手动布线(代表,构造函数,支持领域等)

var myTaskA = _taskFactory.Create<ConcreteTaskA>();var myTaskB = _taskFactory.Create<ConcreteTaskB>();var myTaskC = _taskFactory.Create<ConcreteTaskC>();...var myTaskZZ = _taskFactory.Create<ConcreteTaskZZ>();

如果_taskFactory包装容器如this other post所示,那将是非常少的工作,但它也基本上意味着我使用服务定位器来创建我的任务.

我还有哪些其他选择可能适合解决这个问题?

(注意:我很有可能完全偏离轨道,我必须阅读更多有关DI的内容,在这种情况下,任何贡献都会更加重要)

解决方法 值得研究的一种方法是将问题分解为使用一组相关任务的“工作单元”:
public class WorkItem1 : ISomeWork{    public WorkItem1(Task1 t1,Task2 t2...) { }    public voID DoSomething() { ... }}

然后,你对工厂的使用会降向someWorkFactory().DoSomething(),可能会出现几种不同的’某事’.

在工厂或其他任何事物上具有大量依赖关系的类通常指向等待被发现以打破工作的更小,更集中的类.

希望这可以帮助.

总结

以上是内存溢出为你收集整理的c# – 服务定位器比依赖注入更容易使用?全部内容,希望文章能够帮你解决c# – 服务定位器比依赖注入更容易使用?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1248942.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-07
下一篇 2022-06-07

发表评论

登录后才能评论

评论列表(0条)

保存