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

Asp.net mvc 如何在Onion架构应用程序中将连接字符串传递给DBContext?,asp.net-mvc,dependency-injection,ef-code-first,ninject,onion-architecture,Asp.net Mvc,Dependency Injection,Ef Code First,Ninject,Onion Architecture,这是一个带有服务层和存储库层的标准洋葱架构MVC应用程序。应用程序需要从旧组件(外部文件源)读取连接字符串并传递到DBContext 如何将此连接字符串传递给存储库或DBContext,以便将其传递给DBContext构造函数 public class TSService : ITSService { public TSService (ITSRepository tsRepository) { } } public class TSReposito

这是一个带有服务层和存储库层的标准洋葱架构MVC应用程序。应用程序需要从旧组件(外部文件源)读取连接字符串并传递到DBContext

如何将此连接字符串传递给存储库或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)
        {
        }
}

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

public class ApplicationDbContext
{
    public ApplicationDbContext()
        : base("ConnectionStringName")
    {
    }
}
然后,使用该名称在Web.config中定义连接字符串

你所有的其他东西看起来都很好。您正在将上下文注入到存储库中,并将存储库注入到服务中。我会说,这似乎是矫枉过正。通常,您应该只拥有服务或存储库,三个级别的依赖关系似乎有点多。然而,在对你的申请一无所知的情况下,我不能肯定它是“错误的”;我只是鼓励你评估一下你是否真的需要这么多的抽象。上下文是否可以简单地注入到服务中,并在某一天调用它

如何将此连接字符串传递到存储库或DBContext so 是否可以将其传递给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)
        {
        }
}
您可以通过在启动期间从配置文件(在内部)读取连接字符串来实现这一点,这与调用
DBContext
的构造函数的位置相同

例如:

string conStr=ConfigurationManager.ConnectionStrings[“conStr”].ConnectionString;
Register(()=>newdbcontext(conStr));

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

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


类似于此处所示:

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