我有一个其他合同扩展的基本存储库合同,如下所示
public interface IBaseRepository<T> where T : class
{
IList<T> GetContents();
}
然后还有其他合同将其扩展如下
public interface IRepository1 : IBaseRepository<MyClass1>
{
}
public interface IRepository2 : IBaseRepository<MyClass2>
{
}
我实现 IRepository1 如下
public class Repository1 : IRepository1
{
public IList<MyClass1> GetContents()
{
//some code goes here
}
}
对于 IRepository2 类似
public class Repository2 : IRepository2
{
public IList<MyClass2> GetContents()
{
//some code goes here
}
}
现在我有一个服务 Service1 实现 IService 如下
public class Service1 : IService
{
}
我想在我的服务构造函数中使用我的基础存储库(IBaseRepository),获取这个基础存储库的一个实例并像这样使用它
public class Service1 : IService
{
private IBaseRepository<T> _baseRepository;
public Service1(IBaseRepository<T> baseRepository)
{
_baseRepository = baseRepository;
}
public MyMethod1()
{
var contentsOfType1 = _baseRepository<MyClass1>.GetContents();
}
public MyMethod1()
{
var contentsOfType2 = _baseRepository<MyClass2>.GetContents();
}
}
这是我无法做到的。
所以我有一个类型为 T 的通用基础存储库合同,还有其他合同(接口)扩展了基础合同,并指定了 T 类型。
所有这些合约(扩展通用基础合约)都有各自的实现。
我想要做的是在我的服务类中,实例化这个通用基础合约,并使用它来推断扩展类型(以及因此实现)并使用基础存储库中的方法。
所以如果基础合约是
IBaseRepository<T>
和延长合同是
IRepository1 : IBaseRepository<MyClass1>
这是由
Repository1 : IRepository1
我想在我的服务类中使用它
public class service()
{
*private IBaseRepository<T> _repo;
public service(IBaseRepository<T> repo)
{
*_repo = repo;
}
public void MyMethod()
{
*var x = _repo<MyClass1>.MethodFromIBaseRepository()
}
}
所以它是我想要实现的*标记线,我无法做到。
我正在为 DI 使用城堡温莎。
谢谢你们的帮助