Настройте атрибут для типа так, чтобы методы, отмеченные другим атрибутом, ожидали - PullRequest
1 голос
/ 17 февраля 2020

Я пытаюсь создать пользовательский атрибут для типа, который ожидает, что некоторые свойства внутри этого типа будут помечены другим атрибутом, аналогично тому, как это делается с ServiceContract в WCF :

[ServiceContract]
public interface ITestServiceContract
{
    [OperationContract]
    void SomeOperation();
}

Если ни один метод в ServiceContract не помечен атрибутом OperationContract, отображается следующее предупреждение:

Интерфейс 'ITestServiceContract' помечен как ServiceContract, но не ' не содержит никаких контрактов на операции

При рассмотрении реализации из ServiceContract я не вижу, где это будет определено:

[AttributeUsage(ServiceModelAttributeTargets.ServiceContract, Inherited = false, AllowMultiple = false)]
public sealed class ServiceContractAttribute : Attribute
{
    ...
}

ServiceModelAttributeTargets.ServiceContract определяется внешне:

public const AttributeTargets ServiceContract = AttributeTargets.Interface | AttributeTargets.Class;

Можно ли как-нибудь определить такой атрибут?

1 Ответ

2 голосов
/ 17 февраля 2020

Вы обычно не определяете такого рода логи c в самом атрибуте. Атрибут обычно просто «сидит» и содержит некоторые данные. Вы будете оценивать такие ограничения при извлечении атрибута позднее.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...