ベースライブラリプロジェクトで次のインターフェイスを定義しています。
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'から'User'へのボクシング変換またはタイプパラメータ変換はありません。
私が間違っている根本的なことがあると確信しています。このモデルに関するアドバイスを改善していただければ幸いです。ありがとう
編集(ここで要求されたのはGetUserメソッドです):
public T GetUser<T>(int id) where T : User {
return _session.Get<T>(id);
}
注:_sessionはNHibernateセッションです。