【问题标题】:How to pass connection string to DBContext in Onion architecture application?如何在 Onion 架构应用程序中将连接字符串传递给 DBContext?
【发布时间】:2015-03-18 15:57:13
【问题描述】:

这是一个标准的 Onion 架构 MVC 应用程序,带有 Service 和 Repository 层。应用程序需要从遗留组件(外部文件源)读取连接字符串并传递给 DBContext。

如何将此连接字符串传递给 Repository 或 DBContext,以便将其传递给 DBContext 构造函数?

public class TSService : ITSService
{
       public TSService (ITSRepository tsRepository)
        {
        }
}
public class TSRepository : ITSRepository
{
        private IContext _context;
        public TSRepository (IContext context)
        {
            _ context = context;
        }

        public Employee GetEmployee(string employeeNumber)
        {
        }
}

【问题讨论】:

    标签: asp.net-mvc dependency-injection ef-code-first ninject onion-architecture


    【解决方案1】:

    如何将此连接字符串传递给 Repository 或 DBContext 所以 它可以传递给 DBContext 构造函数吗?

    您可以通过在启动期间(在您的Composition Root 中)读取配置文件中的连接字符串来执行此操作,这与您调用DBContext 的构造函数的位置相同。

    例子:

    string conStr = ConfigurationManager.ConnectionStrings["constr"].ConnectionString;
    
    container.Register<DBContext>(() => new DBContext(conStr));
    

    【讨论】:

      【解决方案2】:

      不确定传递连接字符串是什么意思。连接字符串应按名称引用,按照约定或在上下文定义中手动指定:

      public class ApplicationDbContext
      {
          public ApplicationDbContext()
              : base("ConnectionStringName")
          {
          }
      }
      

      然后,您在 Web.config 中使用该名称定义连接字符串。

      您拥有的其他一切看起来都很好。您将上下文注入到您的存储库中,并将您的存储库注入到您的服务中。我会说这似乎有点矫枉过正。一般来说,你应该只有服务或存储库,三级依赖似乎有点多。但是,在不了解您的应用程序的情况下,我不能肯定地说这是“错误的”;我只是鼓励你评估你是否真的需要这么多抽象。可以简单地将上下文注入到服务中并调用它吗?

      【讨论】:

      • 应用程序需要从遗留组件中读取连接字符串,其中连接字符串以自定义格式保存在文件中。所以我需要知道我应该在哪里调用该组件来读取以及传递到存储库层的方式。由于它使用 DI,我不知道它如何通过 Repository 构造函数传递。
      • 它稍后需要服务,因为它正在执行不属于域类的附加逻辑。
      【解决方案3】:

      只需创建一个像 ISettingService 这样的核心服务接口,它具有从某处获取连接字符串的方法,并在基础架构层中实现它。

      将它传递给您的存储库,然后传递给您的存储库正在使用的 IContext 接口。您的存储库应该将两者连接起来。

      可能像这里显示的那样:https://dotnetfiddle.net/rtQ81E

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-12-07
        • 2021-11-18
        • 1970-01-01
        • 2011-06-15
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多