簡體   English   中英

如何在工廠創建的ASP.NET Core中注冊服務?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM