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)
如果像这样的东西运行很多,我希望有比运行类型更好的方法.
你在这里做的是一个穷人的控制容器倒置.扣紧,学习依赖注入和控制反转的概念,然后你可以编写如下代码:
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
从你的类名(所以User
和Post
,不UserClass
和PostClass
).)