利用可能なアクティビティを表す特定の列挙型のアクセス許可を確認するモジュールを登録するカスタム承認サービスをコーディングしようとしています。
public interface IAuthorizationService
{
void Register<T>(IAuthorizationModule module);
bool Authorize<T>(T activity);
}
public class AuthorizationService : IAuthorizationService
{
private readonly Dictionary<Type, IAuthorizationModule> activities;
public AuthorizationService()
{
activities = new Dictionary<Type, IAuthorizationModule>();
}
public void Register<T>(IAuthorizationModule module)
{
activities[typeof(T)] = module;
}
public bool Authorize<T>(T activity)
{
return activities[typeof(T)].Authorize(activity);
}
}
public interface IAuthorizationModule
{
bool Authorize<T>(T activity);
}
public class OrderAuthModule : IAuthorizationModule
{
public bool Authorize<OrderActivity>(OrderActivity activity)
{
return activity == OrderActivity.Cancel;
}
}
public enum OrderActivity
{
Place,
Cancel,
Refund
}
このコードは、次の例外でコンパイルに失敗しています:
'OrderActivity' is a 'type parameter', which is not valid in the given context
オンライン: return activity == OrderActivity.Cancel;
。
型(enum)に応答するモジュールを登録するIAuthorizationModule<T>
ための辞書が必要なため、インターフェイスを as として宣言することはできません。<Type, IAuthorizationModule>
T
ここで何が欠けていますか?