我有类似以下的类:使用泛型 - 从通用类中调用通用类
public abstract class Manager<T, TInterface> : IManager<T> where TInterface : IRepository<T>
{
protected abstract TInterface Repository { get; }
public virtual List<T> GetAll()
{
return Repository.GetAll();
}
}
这工作完全正常,但是,有没有办法从具有TInterface中脱身在产生的类,它扩展我的一般抽象类抽象类的声明和:
public class TestManager : Manager<TestObject, ITestRepository>, ITestManager
我被迫使用ITestRepository,使存储库属性的抽象,由于事实,即它可以包含我需要知道自定义方法关于并能够打电话。
随着我继续构建图层,我将不得不继续完成整个过程。例子是,如果我有一个通用的抽象控制器或服务层:
public class TestService : Service<TestObject, ITestManager>, ITestService
是否有更好的方法来做到这一点或这是允许一个泛型类调用另一个泛型类的最佳做法?
会使用Action <>或Func <>帮助缓解您的问题吗?这取决于何时/为什么要调用这些函数。 – 2010-07-28 13:58:02
我对你为什么在这个例子中使用一个通用的存储库的情况有点困惑。如果它每次都要实施IRepository,为什么你要使用泛型。在你展示的代码中,没有理由需要通用的TInterface。你能否解释一下你在这种情况下使用泛型的理由,因为它可能是出于你没有显示的原因,但你可能能够消除它,从而避免你的问题 –
2010-07-28 14:05:48
@Craig Suchanec:原因是存储库类必须有一个方法GetAll(),返回一个T列表。这意味着存储库类在T上被参数化。 – siride 2010-07-28 14:09:16