Инкапсуляция атрибута - PullRequest
0 голосов
/ 01 июня 2018

Я хотел бы знать, возможно ли инкапсулировать атрибут ac #.

Я лучше объясню, в чем заключается моя цель:

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

Единственная идея, которая у меня есть, - создать собственный атрибут, который наследуется от nuget attibute, но это не имеет смысла.Таким образом, я не encapsulantig, и я должен везде устанавливать пакет nuget.

Я пытаюсь сделать пример:

MyLibrary.csprj <-- Here I install nuget package
    |
    |--> MyCustomClassAttribute.cs 
    |--> MyCustomParamAttribute.cs

MyCustomClassAttribute и MyCustomParamAttribute - мои пользовательские атрибуты, которые должныскрыть атрибуты пакета nuget.Один из атрибутов пакета nuget выглядит примерно так:

public class NugetPackageAttribute : Attribute
{
    public NugetPackageAttribute(string inputParameter)
    {
    }
}

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

Тогда я должениспользуйте мои пользовательские атрибуты в других модулях моего проекта:

MyProjectModule1.csprj
  |
  -->MyProjectClass1.cs 

MyCustomClass.cs примерно так:

[MyCustomClass]
public class MyProjectClass1
{
    public void DoWork([MyCustomParam]object param)
    { ... }
}

Итак, существует ли способ инкапсуляции атрибута?

Спасибо

РЕДАКТИРОВАТЬ

Я пытаюсь найти общее решение проблемы.У меня есть решение с N проектов.

Solution
    └-> Project 1
    └-> Project 2
    └-> Project 3
   ...
    └-> Project N

Я должен установить пакет Nuget, который содержит некоторые атрибуты.Я должен использовать эти атрибуты в разных точках решения.Это означает, что я должен установить пакет nuget в другой проект моего решения, например:

Solution
    └-> Project 1 //<-- Nuget Package X here
    |     └-> [NuGetAttr]public void Class1{}
    |
    └-> Project 2 //<-- Nuget Package X here
    |      └-> [NuGetAttr]public void Class2{}
    |
    └-> Project 3
    |
   ...
    └-> Project N //<-- Nuget Package X here
          └-> [NuGetAttr]public void ClassN{}

Я хочу избегать повсеместной установки пакета nuget.Поэтому я хочу сделать что-то вроде этого:

Solution
    └-> Project 1 //<-- Reference to my Project N+1
    |     └-> [MyCustomAttr]public void Class1{}
    |
    └-> Project 2 //<-- Reference to my Project N+1
    |      └-> [MyCustomAttr]public void Class2{}
    |
    └-> Project 3 
    |
   ...
    └-> Project N //<-- Reference to my Project N+1
    |     └-> [MyCustomAttr]public void ClassN{}
    |
    └-> Project N+1 //<-- Nuget Package X here and stop
          └-> public void MyCustomAttr : Attribute {} //<-- Here inside use the NuGetAttr, or I dont know what...
...