는 (내 PostSharp 솔루션이 충분하지 않은 경우 아마 당신은 달성하기 위해 DLR을 사용할 수 있습니까?)
예하실 수 있습니다. 인스턴스 스코프 된 aspect에서 introdumember 애트리뷰트를 사용할 것이다. 가장 좋은 방법은 postshsrp를 사용하여 인터페이스를 구현 한 다음 대상 클래스를 해당 인터페이스로 참조하여 메소드를 노출하는 것입니다. Post.Cast <>()을 사용하여 디자인 타임에 액세스 할 수 있습니다.
여기에는 두 가지 방법이 있습니다. 첫 번째는 인터페이스를 통해, 두 번째는 스텁을 사용합니다.
방법 1 - 인터페이스
public class Program
{
static void Main(string[] args)
{
Customer c = new Customer();
var cc = Post.Cast<Customer, ISomething>(c);
cc.SomeMethod();
}
}
public interface ISomething
{
void SomeMethod();
}
[AddMethodAspect]
public class Customer
{
}
[Serializable]
[IntroduceInterface(typeof(ISomething))]
public class AddMethodAspect : InstanceLevelAspect, ISomething
{
#region ISomething Members
public void SomeMethod()
{
Console.WriteLine("Hello");
}
#endregion
}
방법 2 - 스텁
public class Program
{
static void Main(string[] args)
{
Customer c = new Customer();
c.SomeMethod();
}
}
[AddMethodAspect]
public class Customer
{
public void SomeMethod() { }
}
[Serializable]
public class AddMethodAspect : InstanceLevelAspect
{
[IntroduceMember(OverrideAction = MemberOverrideAction.OverrideOrFail)]
public void SomeMethod()
{
Console.WriteLine("Hello");
}
}
추가 정보 그냥 경우에 캐스트 <>를 사용하여 몇 가지 문제는()가 함수가 아니라 실제 캐스팅을 수행합니다. 컴파일 결과는 다음과 같습니다.
private static void Main(string[] args)
{
Customer c = new Customer();
ISomething cc = c;
cc.SomeMethod();
}
메소드를 소개하기 위해 2 개의 mthod를 포함하도록 업데이트되었습니다. –