依赖注入:如何构造依赖于运行时参数的类?

时间:2014-06-19 11:32:02

标签: dependency-injection scope runtime factory

我想在我们的应用程序中引入DI。

在我们的应用程序中,我们有一些通用的参数传递给整个 应用程序,主要通过构造函数参数。 例如,参数 region 将所有操作限制为地理区域。此参数在运行时从用户输入收集,因此在组合根处不知道。

我应该如何创建始终限于在区域上工作的课程?

我知道我可以使用工厂模式。在这种情况下,我需要将DIC传递到工厂,这是(据我所知)反模式。

1 个答案:

答案 0 :(得分:4)

当使用DI时,工厂模式肯定不是反模式,即使你会看到工厂的数量decrease when you apply DI correctly

在你的情况下,工厂可能不是最好的方法。通常您应该prevent letting the object graph depend on runtime data,并且您应该将该请求特定数据的需求与您的服务组合分开。

在您的情况下,可能很容易使用某种IRegionContextIRegionManager抽象来获取当前请求的区域。这个IRegionContext本身就是一个服务,但是包含一个方法,可以在构造对象图之后由应用程序调用:

public interface IRegionContext
{
    Region CurrentRegion { get; }
}

应用程序类型可以取决于IRegionContext,并且在Web应用程序的组合根目录中,您可以使用特殊的AspNetRegionContext实现,该实现允许根据当前请求检索区域。