如何在洋葱架构应用程序中将连接字符串传递给 DBContext?
How to pass connection string to DBContext in Onion architecture application?
这是一个标准的洋葱架构 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)
{
}
}
不确定传递连接字符串是什么意思。连接字符串应按名称引用,按照约定或在上下文定义中手动指定:
public class ApplicationDbContext
{
public ApplicationDbContext()
: base("ConnectionStringName")
{
}
}
然后,您使用该名称在 Web.config 中定义连接字符串。
你的其他一切看起来都很好。您正在将上下文注入您的存储库,并将您的存储库注入您的服务。我会说这 似乎 有点矫枉过正。一般来说,你应该只有服务或存储库,三级依赖似乎有点多。但是,在不了解您的应用程序的情况下,我不能肯定地说它是 "wrong";我只是鼓励您评估您是否真的需要这么多抽象。上下文可以简单地注入到服务中并称之为 day 吗?
How do I pass this connection string to Repository or DBContext so
that it can be passed to DBContext constructor?
您可以通过在启动期间(在您的 Composition Root 中)从配置文件中读取连接字符串来执行此操作,这与您调用 DBContext
的构造函数的位置相同。
示例:
string conStr = ConfigurationManager.ConnectionStrings["constr"].ConnectionString;
container.Register<DBContext>(() => new DBContext(conStr));
只需创建一个像 ISettingService 这样的核心服务接口,它具有从某处获取连接字符串的方法,并在基础结构层中实现它。
将其传递到您的存储库,然后传递到您的存储库正在使用的 IContext 接口。您的存储库应该将两者连接起来。
可能像这里显示的那样:https://dotnetfiddle.net/rtQ81E
这是一个标准的洋葱架构 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)
{
}
}
不确定传递连接字符串是什么意思。连接字符串应按名称引用,按照约定或在上下文定义中手动指定:
public class ApplicationDbContext
{
public ApplicationDbContext()
: base("ConnectionStringName")
{
}
}
然后,您使用该名称在 Web.config 中定义连接字符串。
你的其他一切看起来都很好。您正在将上下文注入您的存储库,并将您的存储库注入您的服务。我会说这 似乎 有点矫枉过正。一般来说,你应该只有服务或存储库,三级依赖似乎有点多。但是,在不了解您的应用程序的情况下,我不能肯定地说它是 "wrong";我只是鼓励您评估您是否真的需要这么多抽象。上下文可以简单地注入到服务中并称之为 day 吗?
How do I pass this connection string to Repository or DBContext so that it can be passed to DBContext constructor?
您可以通过在启动期间(在您的 Composition Root 中)从配置文件中读取连接字符串来执行此操作,这与您调用 DBContext
的构造函数的位置相同。
示例:
string conStr = ConfigurationManager.ConnectionStrings["constr"].ConnectionString;
container.Register<DBContext>(() => new DBContext(conStr));
只需创建一个像 ISettingService 这样的核心服务接口,它具有从某处获取连接字符串的方法,并在基础结构层中实现它。
将其传递到您的存储库,然后传递到您的存储库正在使用的 IContext 接口。您的存储库应该将两者连接起来。
可能像这里显示的那样:https://dotnetfiddle.net/rtQ81E