C#泛型:将通用类型与另一类相匹配的更好方法是什么?

Pro*_*ool 3 c# generics typeof

更新:没有举一个很好的例子.希望现在好多了.

有没有比这更好的方法:

(typeof(TRepository) == typeof(UserClass))
Run Code Online (Sandbox Code Playgroud)

这是写作的用法:

public static IBaseRepository<TClass> GetRepository<TClass>() where TClass : IDataEntity
{
  IBaseRepository<TClass> repository = null;

  if (typeof(TClass) == typeof(UserClass))
  {
     repository = (IBaseRepository<TClass>)new UserClassRepository();
  }

  if (typeof(TClass) == typeof(PostClass))
  {
     repository = (IBaseRepository<TClass>)new PostClassRepository();
  }

  return repository;
}
Run Code Online (Sandbox Code Playgroud)

如果像这样的东西运行很多,我希望有比运行类型更好的方法.

jas*_*son 6

你在这里做的是一个穷人的控制容器倒置.扣紧,学习依赖注入控制反转的概念,然后你可以编写如下代码:

IIoCContainer container = new IoCContainer();
container.RegisterType<IBaseRepository<UserClass>, UserClassRepository>();
container.RegisterType<IBaseRepository<PostClass>, PostClassRepository>();
var userClassRepository = container.Resolve<IBaseRepository<UserClass>>();
Run Code Online (Sandbox Code Playgroud)

您可以在运行时(如上所述)或配置文件中配置容器.您可以指定对象生存期(瞬态,单例,每个线程或自定义).依赖注入容器旨在帮助创建对象,尤其是对于复杂的对象结构和依赖项,编码到接口而不是具体类型(不再是new ConcreteType())和组件配置.

(顺便说一句,降后缀Class从你的类名(所以UserPost,不UserClassPostClass).)