如何在Onion架构应用程序中将连接字符串传递给DBContext?

时间:2015-03-18 15:57:13

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

这是一个带有Service和Repository层的标准Onion架构MVC应用程序。应用程序需要从旧组件(外部文件源)读取连接字符串并传递给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)
        {
        }
}

3 个答案:

答案 0 :(得分:0)

通过连接字符串不确定您的意思。连接字符串应按名称引用,或者按照约定引用,或者在上下文定义中手动指定它:

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

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

你拥有的其他一切看起来都很好。您将上下文注入存储库,将存储库注入服务中。我会说这个似乎就像是矫枉过正。通常,您应该只拥有服务或存储库,三个级别的依赖关系似乎有点多。但是,在不了解您的申请的情况下,我无法明确表示其错误&#34 ;;我只是鼓励你评估你是否真的需要这么多的抽象。上下文是否可以简单地注入服务并称之为日期?

答案 1 :(得分:0)

  

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

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

示例:

string conStr = ConfigurationManager.ConnectionStrings["constr"].ConnectionString;

container.Register<DBContext>(() => new DBContext(conStr));

答案 2 :(得分:0)

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

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

这里显示的内容可能是:https://dotnetfiddle.net/rtQ81E