所以我试图注入(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)通用类型参数由逗号表示。
SomeType<>
SomeType<,>
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/