【发布时间】:2020-05-04 12:27:54
【问题描述】:
这是我希望在我的应用程序中能够执行的操作:
public void BusinessLogic (IFactory workerFactory)
{
string specificObjectType = ... // not known in advance
IWorkerObject workerObject = workerFactory.CreateByType(specificObjectType);
workerObject.DoActualWork();
}
换句话说,我想要一个能够按需生成各种IWorkerObject 实现的实际工厂,并且我希望该工厂是可注入的。理想情况下,Factory 本身也能够从服务容器中获取这些实现对象:
public class WorkerFactory
{
public WorkerFactory (IServiceContainer ...)
{ ... }
public IWorker CreateByType (string type)
{
return ...; // a thing that can be provided by the service container
}
}
原因是我希望能够创建(例如)SteelWorker 或 CopperWorker 或 AluminumWorker,具体取决于 specificObjectType 值所代表的金属类型。这对我来说似乎是一种正常的工厂模式,但我不知道如何使类可注入并为其提供直到创建时才解析的参数。
如果这可以通过 Unity 完成,那就太好了。如果我需要解决它或使用其他 DI 框架,那也没关系。
【问题讨论】:
-
你考虑过使用泛型
IWorker CreateByType<T>() where T : IWorker -
我在创建时可用的东西是像“Steel”或“Copper”这样的字符串,而
IWorker实现本身在本质上并不是通用的;即,SteelWorker类与CopperWorker类非常不同。所以这充其量只是将问题推到解决T,这是我已经遇到的问题。 -
你为什么要这个?
标签: c# .net-core dependency-injection