这是一个带有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)
{
}
}
答案 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