如何引入应用程序范围的上下文对象?

时间:2015-05-31 18:56:03

标签: asp.net .net architecture

我需要从应用程序的业务层访问几个属性。这些是一些ID和常见设置。它们中的大多数仅在请求 - 响应寿命期间有效 这是一个Web应用程序(具体的ASP.NET Web窗体),设置了依赖注入。

目前,这些属性通过方法参数直接传递给业务层的服务。这有效但但效率不高,因为:

  • 有时参数'需要更深入地传递值,使可读性稍微模糊一些
  • 某些属性应该是延迟解析的,每次请求只应执行一次
  • 检索通过触摸数据库解析的属性可能会让新开发人员感到困惑(没有统一的方法)
  • 一些服务是由工厂构建的,它使用一些配置参数来丰富它们

我正在考虑引入一个应用程序上下文接口,在主项目中有一个实现,它将在每个请求中创建。它可以直接注入服务,使它们自动独立地进行参数化(服务不再需要工厂)。

应该如何解决这个问题,还是有其他选择呢? 我不喜欢的一个选择是,它可能会将主要粒子与业务层绑定在一起,这不是The Clean Architecture的完美示例。

2 个答案:

答案 0 :(得分:0)

我说你的解决方案是一个非常常见的解决方案 - 注入一个“应用程序”环境'进入你的班级。但我要注意的一件事是确保遵循集成隔离原则(来自SOLID)。不要只是开始让你的所有类都期望一个应用程序上下文实例。相反,设计用于拆分应用程序上下文的接口,并让您的类期望它们作为依赖项。然后,您的应用程序上下文将需要实现所有接口。

这是正确的方法,因为它将您的类与实现分离。实际上你的课程并不关心他们的依赖是来自一个巨大的应用程序环境,他们只关心它实现的具体方法。这将使您的代码更加健壮,因为如果您稍后更改应用程序上下文的实现,您将降低破坏某些内容的风险。

答案 1 :(得分:0)

为什么不使用某些依赖注入容器?您的全局设置和参数可以作为伪单例注册到它,然后您就可以从应用程序内的任何位置整齐地请求它们。