封装属性

时间:2018-06-01 07:36:49

标签: c# .net encapsulation custom-attributes

我想知道是否可以封装c#属性。

我更好地解释了我的目标:

我在类库中安装了一个来自nuget的包...在这个包中我有一些属性,我应该在我的项目的不同模块中使用...我不想在任何地方安装包,所以我想要创建一个隐藏nuget包中属性的自定义属性。

我唯一的想法是创建一个继承自nuget attibute的自定义属性,但这没有任何意义。通过这种方式,我不是封装,我应该在任何地方安装nuget包。

我试着做一个例子:

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

MyCustomClassAttributeMyCustomParamAttribute是我的自定义属性,应隐藏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...

0 个答案:

没有答案