Я пытаюсь написать код службы пользовательских авторизации, где я зарегистрировать модуль для проверки разрешений для конкретного перечисления, представляющего доступные виды деятельности:Общий метод и недопустимый контекст исключение
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;
.
Я не могу объявить интерфейс как IAuthorizationModule<T>
, потому что мне нужен словарь <Type, IAuthorizationModule>
для регистрации модулей, которые будут отвечать на тип T
(enum).
Что мне здесь не хватает?
В какую строку вы видите эту ошибку? –
Ops, извините. Отредактировано с ошибкой строки. –
Можете ли вы установить ограничение в свой интерфейс luiz? of orderactivity – terrybozzio