我想知道是否可以封装c#属性。
我更好地解释了我的目标:
我在类库中安装了一个来自nuget的包...在这个包中我有一些属性,我应该在我的项目的不同模块中使用...我不想在任何地方安装包,所以我想要创建一个隐藏nuget包中属性的自定义属性。
我唯一的想法是创建一个继承自nuget attibute的自定义属性,但这没有任何意义。通过这种方式,我不是封装,我应该在任何地方安装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...