C# 尝试在基类中创建泛型方法

C# 尝试在基类中创建泛型方法,c#,generics,service-locator,C#,Generics,Service Locator,我对泛型在代码中的使用是相当陌生的,我正在试验它们的用法,并且可能需要一些帮助。我用的是C# 因此,我正在尝试一些新的设计概念,并尝试使用服务定位器模式与存储库模式相结合,以减少数据/业务层的耦合,并使其更易于升级 我的数据/业务层中有两个定位器: 一个存储库定位器,它允许我表示我想要的存储库的接口并获取该对象的实例。 一个实例定位器,它允许我表示我想要的对象的接口,并获取该对象的新实例 除了一个挂起的问题外,在我所有的业务对象类中,我有两个“剪贴板继承”方法,分别称为GetRepository

我对泛型在代码中的使用是相当陌生的,我正在试验它们的用法,并且可能需要一些帮助。我用的是C#

因此,我正在尝试一些新的设计概念,并尝试使用服务定位器模式与存储库模式相结合,以减少数据/业务层的耦合,并使其更易于升级

我的数据/业务层中有两个定位器: 一个存储库定位器,它允许我表示我想要的存储库的接口并获取该对象的实例。 一个实例定位器,它允许我表示我想要的对象的接口,并获取该对象的新实例

除了一个挂起的问题外,在我所有的业务对象类中,我有两个“剪贴板继承”方法,分别称为GetRepository()和GetInstance()。这些方法中的每一种都只有一个区别,即它们所寻找的接口

例如,my UserManagement类具有以下方法:

protected IUserRepository GetRepository()
{
        IServiceLocator locator = new ServiceLocator();
        IUserRepository repository = locator.GetService<IUserRepository>();
        return repository;
}

protected IUser GetInstance()
{
    IInstanceLocator locator = new InstanceLocator();
        IUser instance = locator.GetInstance<IUser>();
        return instance;
}
受保护的IUserRepository GetRepository()
{
IServiceLocator=新的ServiceLocator();
IUserRepository repository=locator.GetService();
返回存储库;
}
受保护的IUser GetInstance()
{
IInstanceLocator定位器=新InstanceLocator();
IUser instance=locator.GetInstance();
返回实例;
}

我正在寻找一种使其更通用的方法,并希望为所有业务对象构建一个继承类,但在其中使用这些方法。但是我希望使用泛型来定义接口。有没有一种方法可以使用泛型来实现这一点。

尝试以下方法:

  public abstract class BaseClass<TEntity> where TEntity : class {
        public abstract <TEntity> Get<TEntity>();
  }
公共抽象类基类,其中tenty:class{
公共抽象Get();
}

如果这对您没有帮助,请说得更具体。

如果我了解您希望创建基类后的情况:

public abstract BaseClass<T1, T2>
{ 
   protected T1 GetRepository()
   {
        IServiceLocator locator = new ServiceLocator();
        T1 repository = locator.GetService<T1>();
        return repository;
   }

   protected T2 GetInstance()
   {
        IInstanceLocator locator = new InstanceLocator();
        T2 instance = locator.GetInstance<T2>();
        return instance;
   }

}
公共抽象基类
{ 
受保护的T1 GetRepository()
{
IServiceLocator=新的ServiceLocator();
T1 repository=locator.GetService();
返回存储库;
}
受保护的T2 GetInstance()
{
IInstanceLocator定位器=新InstanceLocator();
T2 instance=locator.GetInstance();
返回实例;
}
}
然后,您可以这样使用它:

public ChildClass : BaseClass<IUserRepository, IUser>
{
    public ChildClass()
    {
       IUserRepository userRepos = GetRepository();
       IUser user = GetInstance();

    }
}
公共子类:基类
{
公共儿童班()
{
IUserRepository userRepos=GetRepository();
IUser user=GetInstance();
}
}
等等

公共子类2:基类
{
公共儿童班()
{
IUserRepository2 userRepos=GetRepository();
IUser2 user=GetInstance();
}
}

为什么不使用这两个方法创建基类并从中继承所有子类?(撇开服务定位器模式实际上是一种反模式这一事实不谈)我想要的答案是肯定的,我以前做过,我会在方法调用时定义它,但这是一个更好的解决方案。谢谢
public ChildClass2 : BaseClass<IUserRepository2, IUser2>
{
    public ChildClass()
    {
       IUserRepository2 userRepos = GetRepository();
       IUser2 user = GetInstance();

    }
}