我正在尝试使用Razor页面创建一个新的asp.net核心Web应用程序。我想将数据库上下文添加到startup.cs文件中,但是我使用的是IDesign。
我的DbContext实体在一个我不允许引用的项目中。我需要以某种方式在访问者层或其他地方添加我的上下文。我对.net核心的服务工作方式并不十分熟悉。
我有一个这样的解决方案:
我的问题是,如果我的DbContext驻留在accessors项目中,那么我该如何将其从管理者那里传递出去,以便可以在客户端中使用它?以前有没有人有经验?
重申一下,我知道我可以轻松地在clients项目中引用accessors项目并从那里使用dbcontext。我的问题是,我想避免能够引用访问器,以免其他使用此代码的人无法看到任何访问器类。
答案 0 :(得分:0)
您可以将DbContext
相关类添加到新项目中,而不必包含“ Accessors”项目的各个部分。它将类似于“实用程序”项目,所有项目都可以使用/引用该项目。这样,您的“客户”项目就知道DbContext
对象是什么以及如何使用它,但它却不知道如何获取对象(除非它具有连接字符串并直接使用{{ 1}}类)。这将由“经理”或“访问者”项目负责。
引用链将如下所示:
答案 1 :(得分:0)
因此,我可以按照以下指南完成此任务:https://asp.net-hacker.rocks/2017/03/06/using-dependency-injection-in-multiple-projects.html
我没有从客户端添加所有服务,而是能够使用扩展类从管理器添加这些服务,并从客户端调用该扩展方法。
客户代码:
public void ConfigureServices(IServiceCollection services)
{
services.AddManagerDependencyInjection();
services.AddGroupManagementDbContext();
// etc...
}
经理代码:
public static class IServiceCollectionExtension
{
public static IServiceCollection AddManagerDependencyInjection(this IServiceCollection services)
{
services.AddTransient<IAccessor, Accessor>();
return services;
}
public static IServiceCollection AddDbContext(this IServiceCollection services)
{
var connection =
@"Server=(localdb)\mssqllocaldb;Database=DbName;Trusted_Connection=True;ConnectRetryCount=0";
services.AddDbContext<MyContext>(
options =>
options.UseSqlServer(connection));
return services;
}
}