Есть ли способ добавить атрибуты к методам наследования интерфейса?

Есть общий сервисный интерфейс, реализованный с помощью нескольких технологий.

Например, у меня 2 интерфейса:

  1. IGenralService
  2. IWcfService, унаследованный от IGenralService.

Базовый интерфейс:

    public interface IGenralService
    {
         bool Login(string username, string password);
    }

И сервис wcf:

public interface IWcfService : IGenralService
{
    [OperationContract(IsOneWay = false)]
    [FaultContract(typeof(Exception))]
    void DoSomething();
}

IWcfService специфичен для Wcf и требует атрибута «OperationContract» для методов wcf. Метод «Login» не включает атрибут «OperationContract».

Есть ли способ добавить атрибут к собственному методу?


person Moshe Levi    schedule 19.01.2017    source источник
comment
Вы хотите, чтобы Login-метод для IWcfService был украшен атрибутом, но не для IGeneralService? Это в основном бессмысленно, поскольку любой класс, реализующий какой-либо из ваших интерфейсов, не наследует его атрибуты, вам придется повторно объявить их. Так что вы все равно можете опустить их в интерфейсе.   -  person HimBromBeere    schedule 19.01.2017


Ответы (1)


Я полагаю, что это невозможно, поскольку атрибуты не наследуются классам, реализующим интерфейс. Так что в основном добавление атрибутов в члены-интерфейсы совершенно бесполезно, вы должны делать это в самих классах:

public class WcfService : IWcfService 
{
    [OperationContract(IsOneWay = false)]
    [FaultContract(typeof(Exception))]
    void DoSomething() { ... }
}

В качестве альтернативы вы также можете сделать свой интерфейс абстрактным классом, посредством которого вы можете наследовать атрибуты. Прочтите этот пост, чтобы узнать, как это сделать.

person HimBromBeere    schedule 19.01.2017