[英]How to register a service in ASP.NET Core that is created by a factory?
我收到以下錯誤:
嘗試激活“ MyController”時,無法解析“ IMyRepository”類型的服務。
我知道我的應用程序在依賴項注入方面失敗。
但是我不確定如何更正此錯誤。
我的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>();
我寧願將控制器構造函數和測試類保持不變。 那么,在這種情況下(我將IRepository傳遞給控制器的位置),有沒有辦法設置DI?
編輯:
public class ConcreteRepositoryFactory : IMyRepositoryFactory
{
public ConcreteRepositoryFactory(string connString);
public IMyRepository CreateRepository();
}
對於您要在此處實現的目標,我還不清楚。 簡單地說,如果要注入IMyRepository
,則需要綁定IMyRepository
的實現:
services.AddScoped<IMyRepository, MyRepository>();
如果您要通過工廠注入實施,則只需向工廠提供服務注冊即可:
services.AddScoped<IMyRepository>(p =>
p.GetRequiredService<IMyRepositoryFactory>().CreateRepository());
您正在添加鏈接到ConcreteRepositoryFactory
的Transcient IMyRepositoryFactory
。
因此,您無法在控制器中注入IRepository類,因為asp.net Core在超前注入中不知道您的IRepository類。
您必須像這樣將ConcreteRepositoryFactory
類注入到控制器中:
public MyController(ConcreteRepositoryFactory repo)
而且您可以將IMyRepositoryFactory _repo
存儲在只讀屬性中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.