Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/281.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.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# 如何在工厂创建的ASP.NET Core中注册服务?_C#_Asp.net Core_Dependency Injection_Asp.net Core Mvc - Fatal编程技术网

C# 如何在工厂创建的ASP.NET Core中注册服务?

C# 如何在工厂创建的ASP.NET Core中注册服务?,c#,asp.net-core,dependency-injection,asp.net-core-mvc,C#,Asp.net Core,Dependency Injection,Asp.net Core Mvc,我得到以下错误: 尝试激活“MyController”时,无法解析类型为“IMyRepository”的服务 我知道我的应用程序在依赖注入方面失败了 然而,我不知道如何纠正这个错误 我记忆中的表情是这样的: public interface IMyRepository { public Delete(Guid Id); public Get(Guid Id); //etc.. } 我们在创建单元测试时设置了以下接口 public IMyRepositoryFactory { I

我得到以下错误:

尝试激活“MyController”时,无法解析类型为“IMyRepository”的服务

我知道我的应用程序在依赖注入方面失败了

然而,我不知道如何纠正这个错误

我记忆中的表情是这样的:

public interface IMyRepository
{
  public Delete(Guid Id);
  public Get(Guid Id);
  //etc..
}
我们在创建单元测试时设置了以下接口

public IMyRepositoryFactory
{
  IRepository CreateRepository();
}
我的控制器中的构造函数:

private readonly IRepository _repo;

public MyController(IRepository repo)
{
   _repo = repo;
}
我可以将工厂传递给构造函数,但是这需要我重做单元测试模块,因为它们都将IRepository传递给控制器

Ex. (In Startup ConfigureServices)
services.AddTransient<IMyRepositoryFactory, ConcreteRepositoryFactory>();

您正在添加链接到
ConcreteRepositoryFactory
的TransClient
IMyRepositoryFactory

因此,您不能在控制器中注入IRepository类,因为asp.net Core在Transcent注入中不知道您的IRepository类

您必须向控制器注入
ConcreteRepositoryFactory
类,如下所示:

public MyController(ConcreteRepositoryFactory repo)


您可以在只读属性中存储为
IMyRepositoryFactory\u repo

您正在添加链接到
ConcreteRepositoryFactory
的TransClient
IMyRepositoryFactory

因此,您不能在控制器中注入IRepository类,因为asp.net Core在Transcent注入中不知道您的IRepository类

您必须向控制器注入
ConcreteRepositoryFactory
类,如下所示:

public MyController(ConcreteRepositoryFactory repo)


您可以在只读属性中存储为
IMyRepositoryFactory\u repo

我不太清楚您在这里想要实现什么。简单地说,如果要注入
IMyRepository
,则需要绑定
IMyRepository
的实现:

services.AddScoped<IMyRepository, MyRepository>();
services.addScope();
如果您希望通过工厂注入实现,只需向服务注册提供工厂:

services.AddScoped<IMyRepository>(p =>
    p.GetRequiredService<IMyRepositoryFactory>().CreateRepository());
services.AddScoped(p=>
p、 GetRequiredService().CreateRepository());

我不太清楚您在这里想要实现什么。简单地说,如果要注入
IMyRepository
,则需要绑定
IMyRepository
的实现:

services.AddScoped<IMyRepository, MyRepository>();
services.addScope();
如果您希望通过工厂注入实现,只需向服务注册提供工厂:

services.AddScoped<IMyRepository>(p =>
    p.GetRequiredService<IMyRepositoryFactory>().CreateRepository());
services.AddScoped(p=>
p、 GetRequiredService().CreateRepository());

哪里是
ConcreteRepositoryFactory
的定义?如果您传递服务,则编辑发布到addIf.AddTransient();您必须扩展IMyRepositoryFactory。示例public-ConcreteRepositoryFactory:IMyRepositoryFactory..由于您的类将直接依赖于
IMyRepository
,并且它们似乎没有理由依赖于
IMyRepositoryFactory
,那么该工厂类的功能是什么?它为什么会存在?为什么不这样简单地注册存储库:
services.AddTransient(c=>newmyrepository(conStr))
。哪里是
ConcreteRepositoryFactory
的定义?如果您传递服务,则编辑发布到addIf.AddTransient();您必须扩展IMyRepositoryFactory。示例public-ConcreteRepositoryFactory:IMyRepositoryFactory..由于您的类将直接依赖于
IMyRepository
,并且它们似乎没有理由依赖于
IMyRepositoryFactory
,那么该工厂类的功能是什么?它为什么会存在?为什么不这样简单地注册存储库:
services.AddTransient(c=>newmyrepository(conStr))