我对代码中使用泛型并尝试使用它们相当新,并且可以使用一些帮助。我正在使用C#。
所以我正在玩一些新的设计概念,我试图使用服务定位器模式与存储库模式相结合,使我的数据/业务层更少耦合,更容易升级。
我的数据/业务层中有两个定位器: 存储库定位器,它允许我表示我想要的存储库的接口并获取该对象的实例。 一个实例定位器,它允许我表示我想要的对象的接口并获取该对象的新实例。
大部分工作都很好,除了一个挂起,在我的所有业务对象类中,我有两个方法被放入“剪贴板继承”,称为GetRepository()和GetInstance()。这些方法中的每一种都只有一个区别,即它们正在寻找的接口。
例如,我的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;
}
我正在寻找一种方法来使它更通用,并且想为所有业务对象构建一个继承的类,但在其中使用这些方法。但我希望用泛型定义接口。有没有办法可以使用泛型来做到这一点。
答案 0 :(得分:2)
如果我理解了你想要创建的基类之后的内容:
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;
}
}
然后你可以这样使用它:
public ChildClass : BaseClass<IUserRepository, IUser>
{
public ChildClass()
{
IUserRepository userRepos = GetRepository();
IUser user = GetInstance();
}
}
等
public ChildClass2 : BaseClass<IUserRepository2, IUser2>
{
public ChildClass()
{
IUserRepository2 userRepos = GetRepository();
IUser2 user = GetInstance();
}
}
答案 1 :(得分:0)
尝试一下这个:
public abstract class BaseClass<TEntity> where TEntity : class {
public abstract <TEntity> Get<TEntity>();
}
如果这对您没有帮助,请更具体。