MulticastAttributeUsage를 사용하지 않고 클래스, 인터페이스, 속성, 필드 또는 메서드에 적용 할 수있는 포스트 샤프 속성을 사용할 수 있습니까? 그것은 모든 회원에게 멀티 캐스팅없이 적용된다.다중 캐스트를 사용하지 않고 여러 멤버의 포스트 샤프 측면 사용
MulticastAttributeUsage를 사용하고 클래스에 내 속성을 사용하면 생성 된 IL의 모든 속성, 메서드 등에 내 속성의 새 인스턴스가 자동으로 추가됩니다.
필자가 사용하지 않으면, 필자는 그것을 사용해야한다고 (필자는 Aspect 클래스에서 파생 됨) 불평하기 때문에 컴파일되지 않을 것이다. 여기
내 시나리오입니다 :나는 새로운 직렬화 속성을 만드는 오전, 그래서 나는이 작업을 수행 할 수 있도록하려면 : 내가지고있어 MulticastAttributeUsage를 사용하여 런타임에 반영
[Serialise(ApplyToProperty="Test2", Name="Blah2")]
public class MyClass {
[Serialise(Name="Blah1")]
public string Test1 { get; set; }
public bool Test2 { get; set; }
}
Test1에서 두 개의 Serialise 특성. 런타임에
[Serialise(ApplyToProperty = "Test2", Name = "Blah2")]
public class Test {
[Serialise(ApplyToProperty = "Test2", Name = "Blah2"), Serialise(Name = "Blah")]
public string Test1 { get; set; }
[Serialise(ApplyToProperty = "Test2", Name = "Blah2")]
public bool Test2 { get; set; }
}
난 그냥 Postsharp를 사용할 수없고 반사 내가 필요 정확히 것,하지만 난 또 다른 측면을 소개 Postsharp를 사용해야합니다 : 나는 IL 볼 때이 표시 생성. 내 SerialiseAttribute 코드는 이것이다 :
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Interface | AttributeTargets.Property | AttributeTargets.Field)]
[MulticastAttributeUsage(MulticastTargets.Class | MulticastTargets.Interface | MulticastTargets.Property | MulticastTargets.Field, AllowMultiple = true, PersistMetaData = true, Inheritance = MulticastInheritance.None)]
public class SerialiseAttribute : Aspect, IAspectProvider {
public string ApplyToProperty { get; set; }
public string Name { get; set; }
public override bool CompileTimeValidate(object target) {
return false;
}
IEnumerable<AspectInstance> IAspectProvider.ProvideAspects(object targetElement) {
// Code that introduces a different attribute
}
}
공지 사항 또한 내가 CompileTimeValidate에서 false를 반환하고 있다는 사실은 IL 생성에 어떤 영향을 미칠 것 같지 않습니다, 그것은 "하지 않는 것을 의미하지 않는다"침묵 실패 "보인다 불행히도 그것에 속성을 적용하십시오. 그렇다면 Postsharp가 실제로 모든 구성원에게 속성을 멀티 캐스팅하지 못하게하려면 어떻게해야합니까?