c# - 需要时获得依赖?
问题描述
有什么方法可以仅在需要时获取/获取依赖项?
public class DependentClass
{
public DependentClass(IMandatoryDependency mandatoryDependency, IDependency1 dependency1, IDependency2 dependency2, IDependency3 dependency3)
{
// Assigned to class level property
}
public void MethodsOne()
{
mandatoryDependency.CallMandatoryMethod();
dependency1.CallDependecy1Method();
}
public void MethodsTwo()
{
mandatoryDependency.CallMandatoryMethod();
dependency2.CallDependecy2Method();
}
public void MethodsThree()
{
mandatoryDependency.CallMandatoryMethod();
dependency3.CallDependecy3Method();
}
}
从上面的代码片段中,当我在方法本身中时,我想获取各个方法的依赖关系。像这样的东西:
public class DependentClass
{
public DependentClass(IMandatoryDependency mandatoryDependency)
{
// Assigned to class level property
}
public void MethodsOne()
{
mandatoryDependency.CallMandatoryMethod();
DIContainer.GetDependency<IDependency1>().CallDependecy1Method();
}
public void MethodsTwo()
{
mandatoryDependency.CallMandatoryMethod();
DIContainer.GetDependency<IDependency2>().CallDependecy2Method();
}
public void MethodsOne()
{
mandatoryDependency.CallMandatoryMethod();
DIContainer.GetDependency<IDependency3>().CallDependecy3Method();
}
}
解决方案
假设您使用的是 IOC 容器,您可以在构造函数中注入它自己的容器实例,然后使用此实例来解决您的服务问题,这不是一个好习惯,您可能正在寻找类似这样的东西
另一个不错的选择是通过简单地使用 Lazy 类将可选依赖项设置为 Lazy 对象,因此您的代码将是Lazy<IDependency1>
使用惰性模式确保对象不会被实例化,除非你真的想访问它们,你可以在这里阅读更多关于它的信息