c# - 具有两个类型参数的通用接口(interface)的依赖注入(inject)

标签 c# asp.net-core dependency-injection

所以我试图注入(inject)一个通用存储库,它接收实体类型和实体使用的键类型作为通用类型。
声明看起来像这样:

public class GenericRepository<KeyType, T> : BaseRepository<T, NpgsqlConnection>, IGenericRepository<KeyType, T> 
        where T : class
        where KeyType : struct
所以我尝试像这样注入(inject)它们:
services.AddTransient(typeof(IGenericRepository<>), typeof(GenericRepository<>));
这适用于只有一种泛型类型但不适用于两种泛型类型的情况。我收到以下错误:

Using the generic type 'GenericRepository<KeyType, T>' requires 2 type arguments


有谁知道如何解决这个问题?
我知道我可以为每个人制作类(class),但我想像这样注入(inject)它:
public class RestaurantTypesService : IRestaurantTypesService
{
    private readonly IGenericRepository<long, RestaurantType> _restaurantTypeRepository;

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

最佳答案

这称为未绑定(bind)类型。
多个未绑定(bind)通用类型参数由逗号表示。

  • 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));
    

    关于c# - 具有两个类型参数的通用接口(interface)的依赖注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65802176/

    相关文章:

    java - Android 为简单的自定义类使用依赖注入(inject)

    php - ZF2 : Dependency injection done the proper way

    c# - 在 WebDriver 方法中获取 Specflow 标签

    c# - 如何使用 .NET CLI 指定对其他项目的依赖关系?

    c# - 属性 KeyValuePair<TKey, Tvalue>.Value 没有 setter

    c# - 传递给 MVC Controller 的 id 总是映射为 0

    asp.net-core - Dotnet Core - 在启动时配置延迟加载

    java - Guice Injector 保持应用程序运行

    c# - Markdown 文本中的纯文本搜索

    c# - Xamarin.Forms 无法安装包