我在基础库项目中定义了以下接口:
public interface IWorkContext {
T User<T>() where T : IUser;
// Note this method is kind of a shortcut so i don't
// have to keep passing in T
IUser User();
}
public interface IUser {
int Id { get; }
string UserName { get; }
}
现在我有另一个项目,它使用以下类(实现 IUser)引用上面的项目。
public class User : IUser {
public virtual int Id { get; set; }
public virtual string UserName { get; set; }
// ... Code removed for brevity
}
现在我还需要实现 IWorkContext。这是我的第一次尝试:
public class DefaultWorkContext : IWorkContext {
private readonly IUsersService _usersService;
public DefaultWorkContext(IUsersService usersService) {
_usersService = usersService;
}
public T User<T>() where T : IUser {
return _usersService.GetUser<T>(1));
}
public User User() {
return User<User>();
}
}
然而,这给出了错误:
类型“T”不能用作泛型类型或方法“...GetUser(int)”中的类型参数“T”。没有从“T”到“用户”的装箱转换或类型参数转换。
我确定我做错了一些基本的事情。我很感激有关此模型的任何建议都可以改进。谢谢
编辑(根据要求,这里是 GetUser 方法):
public T GetUser<T>(int id) where T : User {
return _session.Get<T>(id);
}
注意:_session 是一个 NHibernate 会话。