У меня есть атрибут request, который я украшаю некоторыми службами, но мне нужно передать в него общий тип из-за некоторой логики, происходящей внутри него. Это выглядит примерно так:Передача/выставление T на фильтр запроса ServiceStack
[SomeAttribute(typeof(MyClass))]
Это хорошо работает, но если я что-то такое, как ...
[SomeAttribute<MyClass>]
... Я получить «Аннотации не может быть общим» компиляции время.
Внутри мой атрибут выполнения логики, мне нужно сделать следующее:
someClass.doSomething<MyClass>(someString);
Итак, мой вопрос ...
- Могу ли я бросить
MyClass
в той или иной формеT
так что я могу использовать его таким образом? - Есть ли другой способ пропускать
T
в атрибуте без получения ошибки компиляции?
Большое спасибо!
Спасибо за ответ, @mythz! Итак, я вижу, куда вы идете ... и это имеет неплохой смысл. Ваш пример, однако, исключает исключение из среды выполнения «аргументы метода несовместимы» в 'doSomethingFn'. – napo
PS: Поскольку вы находитесь за ServiceStack, вот немного больше контекста ... Я пытаюсь реализовать кэширование по атрибуту, 'this.cache.Get (« ключ »)', где я пытаюсь получить к. О, и используя Mono, FYI ... Имеет смысл? И еще раз спасибо! –
napo
@napo Ему нужно вызвать метод-оболочку, который возвращает 'object' вместо генерирующего ответа' T', посмотрите [ServiceGatewayExtensions] (https://github.com/ServiceStack/ServiceStack/blob/f4c9606b17dae06c7af193d7661dfa2b31d8b722/src /ServiceStack.Client/ServiceGatewayExtensions.cs#L30), который по сути делает то же самое. Это работает точно так же в Mono. В противном случае вы можете вызвать его с отражением напрямую, т. Е. Без кэширования делегата, например: 'genericMi.Invoke (this.cache, new [] {someString})'. – mythz