如果我有一个需要通过其构造函数进行依赖的类:
public MyClass( IDependencyInterface dependency )
并且依赖项使用工厂/构建器(这仍然使我混淆两者之间的区别)来设置其参数:
IDependencyInterface dependency = dependencyFactory
.ChangeSomeParameter(someValue)
.ChangeSomeOtherParameter(someOtherValue)
.Build();
如何在不传入其他工厂实例化所需依赖关系的情况下为MyClass创建工厂?
public MyClassFactory
{
private SomeParam _someParam;
private IDependencyFactory _dependencyFactory;
public myClassFactory( IDependencyFactory dependencyFactory)
{
_dependencyFactory = dependencyFactory;
}
public ImyClassFactory ChangeSomeParameter(someParam)
{
_someParam = someParam;
}
public IMyClass Build()
{
Dependency dependency = _dependencyFactory
.ChangeSomeParameter( _SomeParam )
.Build();
return MyClass(dependency);
}
}
在创建MyClassFactory时,如何避免必须传递建立“ MyClass”所需的依赖项的工厂?还是对,您需要将每个依赖项的工厂传递给具有依赖项的类的工厂?
P.S。我计划使工厂单例在运行时实例化并传递。我也是依赖注入的新手。请让我知道是否有更好的方法通过接口使用工厂。
答案 0 :(得分:0)
如果您不熟悉依赖项注入,我会说:您不。
解决依赖关系并创建绝大多数工厂是依赖注入服务提供商的目的。您可以使用依赖注入组件别人写的来获得此功能,例如Microsoft.Extensions.DependencyInjection。
通常,应用程序代码仅列出其依赖项,例如通过仅将其声明为作为构造函数参数。服务不在乎如何创建它们或它们的依赖项。依赖项注入的作用之一是控制权反转,它通常表示不给我们打电话,我们给您打电话。在谈论依赖注入时,这尤其适用于构造函数。
一旦您开始为如何创建工厂或在工厂中走动而挣扎,就会违反良好设计的几项原则。
请参阅docs.microsoft.com上的Dependency injection in ASP.NET Core文章。页面底部有更多有用的链接。它是在编写ASP.NET Core网站/应用程序时编写的,但是实际上,大多数文章都涉及通常适用于任何应用程序的现代软件开发原理(例如控制反转)。