postsharp의 Gael Fraiteur님이 Metalama를 발표하는 글을 게시했습니다.
Metalama는 간단한 사용으로 사용자 코드에 추가 코드를 주입하는 등의 메타 프로그래밍을 할 수 있게 합니다. 소스 생성기를 이용한 것은 아니고 Roslyn을 이용해 구현되었습니다.
다음은 Metalama의 로그 관련 예시 입니다.
| Aspect 코드 : meta를 통해 대상 코드와 결합됩니다.
using Metalama.Framework.Aspects;
using System;
namespace Doc.SimpleLogging
{
public class SimpleLogAttribute : OverrideMethodAspect
{
public override dynamic? OverrideMethod()
{
Console.WriteLine( $"Entering {meta.Target.Method.ToDisplayString()}" );
try
{
return meta.Proceed();
}
finally
{
Console.WriteLine( $"Leaving {meta.Target.Method.ToDisplayString()}" );
}
}
}
}
| 대상 코드
using System;
namespace Doc.SimpleLogging
{
internal class TargetCode
{
[SimpleLog]
public void Method1()
{
Console.WriteLine( "Hello, world." );
}
}
}
| 변환된 코드
using System;
namespace Doc.SimpleLogging
{
internal class TargetCode
{
[SimpleLog]
public void Method1()
{
Console.WriteLine($"Entering TargetCode.Method1()");
try
{
Console.WriteLine("Hello, world.");
return;
}
finally
{
Console.WriteLine($"Leaving TargetCode.Method1()");
}
}
}
}
https://blog.postsharp.net/post/announcing-metalama-preview-3.html