首页 > 解决方案 > 需要时获得依赖?

问题描述

有什么方法可以仅在需要时获取/获取依赖项?

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();
    }
}

标签: c#.netasp.net-mvcasp.net-coredependency-injection

解决方案


假设您使用的是 IOC 容器,您可以在构造函数中注入它自己的容器实例,然后使用此实例来解决您的服务问题,这不是一个好习惯,您可能正在寻找类似这样的东西

另一个不错的选择是通过简单地使用 Lazy 类将可选依赖项设置为 Lazy 对象,因此您的代码将是Lazy<IDependency1>

使用惰性模式确保对象不会被实例化,除非你真的想访问它们,你可以在这里阅读更多关于它的信息


推荐阅读