我正在处理的应用程序依赖于Autofac作为DI容器,其中一个原因让我决定使用它,其中包括委托工厂功能(见
here)
@H_502_2@这适用于我需要多次重建相同元素的所有情况,如某些报告和相关屏幕的情况.一些报告(甚至那些相同类型的报告)是同时执行的,但它们仅通过用户定义的参数进行更改,因此注入工厂以创建实例,传递免费参数并将其余参数留给应用.
@H_502_2@问题在于每个报告由可变数量的子报告(任务)组成,每个任务都实现ITask接口.每个报告最多可以使用50个不同的任务,每个任务都包含一个精确的业务操作.我有一个选择是注入委托工厂并在需要时创建它们.
@H_502_2@这些任务必须由工厂动态生成,例如:
var myTaskA = _taskFactoryConcreteTaskA(); var myTaskB = _taskFactoryConcreteTaskB(); var myTaskC = _taskFactoryConcreteTaskC(); ... var myTaskZZ = = _taskFactoryConcreteTaskZZ();@H_502_2@需要大量的手动布线(代表,构造函数,支持领域等)
var myTaskA = _taskFactory.Create<ConcreteTaskA>(); var myTaskB = _taskFactory.Create<ConcreteTaskB>(); var myTaskC = _taskFactory.Create<ConcreteTaskC>(); ... var myTaskZZ = _taskFactory.Create<ConcreteTaskZZ>();@H_502_2@如果_taskFactory包装容器如this other post所示,那将是非常少的工作,但它也基本上意味着我使用服务定位器来创建我的任务. @H_502_2@我还有哪些其他选择可能适合解决这个问题? @H_502_2@(注意:我很有可能完全偏离轨道,我必须阅读更多有关DI的内容,在这种情况下,任何贡献都会更加重要)