Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/265.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在类库中使用WebApplication的DbContext_C#_Asp.net Core_Entity Framework Core - Fatal编程技术网

C# 如何在类库中使用WebApplication的DbContext

C# 如何在类库中使用WebApplication的DbContext,c#,asp.net-core,entity-framework-core,C#,Asp.net Core,Entity Framework Core,我使用的是.net core 3.1,我已经在Web应用程序中配置了AppDbContext。我有另一个类库项目,在里面我添加了Webapplication的引用。如何在类库中使用Web App Dbcontext 我尝试在类中创建AppDbContext的实例,如下所示 公共类调用服务 { 专用只读存储器ViceProvider\u服务; 私有只读AppDbContext\u上下文; 公共调用服务(AppDbContext上下文,IServiceProvider服务) { _上下文=上下文;

我使用的是.net core 3.1,我已经在Web应用程序中配置了AppDbContext。我有另一个类库项目,在里面我添加了Webapplication的引用。如何在类库中使用Web App Dbcontext

我尝试在类中创建AppDbContext的实例,如下所示

公共类调用服务
{
专用只读存储器ViceProvider\u服务;
私有只读AppDbContext\u上下文;
公共调用服务(AppDbContext上下文,IServiceProvider服务)
{
_上下文=上下文;
_服务=服务;
}
//...
//...
}

此代码中存在多个问题

如果您希望在控制台应用程序和web中使用相同的代码,则应在类库中提取该代码。 之后,您应该将来自web和控制台应用程序的引用添加到类库中。将来自控制台应用程序的引用添加到web应用程序是错误的

要正确地执行此操作,您应该使用依赖项注入系统

首先,您需要为您的服务创建一个接口。 然后,您可以在类库项目中定义另一个类,该类将添加来自该类库的所有依赖项

public static class DomainModuleDependencies{

 public static IServiceProvider AddDomainDependencies(this IServiceCollection services){
//... add any dependency here
services.AddTransient<AppDbContext>();
services.AddTransient<ICallService,CallService>();
}

}
公共静态类DomainModuleDependencies{
公共静态IServiceProvider AddDomainDependencies(此IServiceCollection服务){
//…在此添加任何依赖项
services.AddTransient();
services.AddTransient();
}
}
然后你可以打电话给服务提供商,为你提供所需的服务

var services = new ServiceCollection();
services.AddDomainDependencies();
var serviceProvider = services.BuildServiceProvider();
var callService = services.GetService<ICallService>();
callServices.CallMethod();
var services=newservicecolection();
services.AddDomainDependencies();
var serviceProvider=services.BuildServiceProvider();
var callService=services.GetService();
callServices.CallMethod();
听起来很复杂,但在将来,如果您需要添加另一个服务,您可以创建它并将其添加到依赖项中。
通过这种方式,您可以从SOLID中尽可能多地使用它。

此代码中存在多个问题

如果您希望在控制台应用程序和web中使用相同的代码,则应在类库中提取该代码。 之后,您应该将来自web和控制台应用程序的引用添加到类库中。将来自控制台应用程序的引用添加到web应用程序是错误的

要正确地执行此操作,您应该使用依赖项注入系统

首先,您需要为您的服务创建一个接口。 然后,您可以在类库项目中定义另一个类,该类将添加来自该类库的所有依赖项

public static class DomainModuleDependencies{

 public static IServiceProvider AddDomainDependencies(this IServiceCollection services){
//... add any dependency here
services.AddTransient<AppDbContext>();
services.AddTransient<ICallService,CallService>();
}

}
公共静态类DomainModuleDependencies{
公共静态IServiceProvider AddDomainDependencies(此IServiceCollection服务){
//…在此添加任何依赖项
services.AddTransient();
services.AddTransient();
}
}
然后你可以打电话给服务提供商,为你提供所需的服务

var services = new ServiceCollection();
services.AddDomainDependencies();
var serviceProvider = services.BuildServiceProvider();
var callService = services.GetService<ICallService>();
callServices.CallMethod();
var services=newservicecolection();
services.AddDomainDependencies();
var serviceProvider=services.BuildServiceProvider();
var callService=services.GetService();
callServices.CallMethod();
听起来很复杂,但在将来,如果您需要添加另一个服务,您可以创建它并将其添加到依赖项中。
通过这种方式,您可以从SOLID中尽可能多地执行操作。

Errr,是否尝试过注入?您需要一个类的实例,并在项目之间传递该实例。@frz3993,不,我没有。我是新手,所以不知道怎么做。@jdweng,AppDbcontext类的实例?您已经有了该类的实例。您只需要将实例传递给其他项目。不是吗?你试过注入吗?你需要一个类的实例,并在项目之间传递实例。@frz3993,不,我没有。我是新手,所以不知道怎么做。@jdweng,AppDbcontext类的实例?您已经有了该类的实例。您只需要将实例传递给其他项目。这不是上下文吗