簡體   English   中英

具有兩種類型 arguments 的通用接口的依賴注入

[英]Dependency injection for generic interface with two type arguments

所以我試圖注入一個通用存儲庫,它接收實體類型和實體使用的鍵類型作為通用類型。

聲明看起來像這樣:

public class GenericRepository<KeyType, T> : BaseRepository<T, NpgsqlConnection>, IGenericRepository<KeyType, T> 
        where T : class
        where KeyType : struct

所以我嘗試像這樣注入它們:

services.AddTransient(typeof(IGenericRepository<>), typeof(GenericRepository<>));

這適用於只有一種泛型類型但不適用於兩種泛型類型的情況。 我收到以下錯誤:

使用泛型類型 'GenericRepository<KeyType, T>' 需要 2 種類型 arguments

有誰知道如何解決這個問題?

我知道我可以為每個人制作課程,但我想像這樣注入它:

public class RestaurantTypesService : IRestaurantTypesService
{
    private readonly IGenericRepository<long, RestaurantType> _restaurantTypeRepository;

    public RestaurantTypesService(IGenericRepository<long, RestaurantType> repository)
    {
        _restaurantTypeRepository = repository;
    }
}

這稱為未綁定類型

多個未綁定通用類型參數由逗號表示。

  • 1 - SomeType<>

  • 2 - SomeType<,>

  • N - SomeType<,(n-1)>

基本上,它應該很簡單

service.AddTransient(typeof(IGenericRepository<,>), typeof(GenericRepository<,>));

世界上最做作的例子

public interface IGenericRepository<T, T2> { }

public class GenericRepository<T, T2> : IGenericRepository<T, T2> { }

public class Bob
{
   private IGenericRepository<int, int> _something;

   public Bob(IGenericRepository<int,int> something)
   {
      _something = something;
      Console.WriteLine(something.GetType().Name);
   }
}

...

var service = new ServiceCollection();

service.AddTransient(typeof(IGenericRepository<,>), typeof(GenericRepository<,>));
service.AddTransient<Bob>();

var provider = service.BuildServiceProvider();
var sdfg=provider.GetService(typeof(Bob));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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