C# 如何在工厂创建的ASP.NET Core中注册服务?
我得到以下错误: 尝试激活“MyController”时,无法解析类型为“IMyRepository”的服务 我知道我的应用程序在依赖注入方面失败了 然而,我不知道如何纠正这个错误 我记忆中的表情是这样的: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
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
的TransClientIMyRepositoryFactory
因此,您不能在控制器中注入IRepository类,因为asp.net Core在Transcent注入中不知道您的IRepository类
您必须向控制器注入ConcreteRepositoryFactory
类,如下所示:
public MyController(ConcreteRepositoryFactory repo)
您可以在只读属性中存储为
IMyRepositoryFactory\u repo
您正在添加链接到ConcreteRepositoryFactory
的TransClientIMyRepositoryFactory
因此,您不能在控制器中注入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))代码>。