PostSharp-il織-思想
-
01-07-2019 - |
質問
考えていPostsharpの枠組みの事務負担に配慮する観点から申し込み方法です。基本的に行なってい飾方法伐採の属性、コンパイル時に混ロギングのコードを必要としています。私のようなこのソリューションなどで、ノイズのごはんタイムをお届け時間をコードす。への意見-経験により、より適切な対策?
解決
申し込みはログインとAOPを用ウィンザー城DynamicProxies.もしていましたが、このまま使用城でにIoCの容器で使用すAOPの経路の少なくともresistenceました。もう少し詳しい情報を知らせてくれ、私の整理をコードまでの放出によってブログ
編集
Ok、この基本Intercepterコード、妖精の基本でお世話になりたいと思います。あintercepters、ログeveryhingとのできる定義メソッド名への○○○より詳細なロギングこのソリューションが妖精に依存するウィンザー城
抽象基底クラス
namespace Tools.CastleWindsor.Interceptors
{
using System;
using System.Text;
using Castle.Core.Interceptor;
using Castle.Core.Logging;
public abstract class AbstractLoggingInterceptor : IInterceptor
{
protected readonly ILoggerFactory logFactory;
protected AbstractLoggingInterceptor(ILoggerFactory logFactory)
{
this.logFactory = logFactory;
}
public virtual void Intercept(IInvocation invocation)
{
ILogger logger = logFactory.Create(invocation.TargetType);
try
{
StringBuilder sb = null;
if (logger.IsDebugEnabled)
{
sb = new StringBuilder(invocation.TargetType.FullName).AppendFormat(".{0}(", invocation.Method);
for (int i = 0; i < invocation.Arguments.Length; i++)
{
if (i > 0)
sb.Append(", ");
sb.Append(invocation.Arguments[i]);
}
sb.Append(")");
logger.Debug(sb.ToString());
}
invocation.Proceed();
if (logger.IsDebugEnabled && invocation.ReturnValue != null)
{
logger.Debug("Result of " + sb + " is: " + invocation.ReturnValue);
}
}
catch (Exception e)
{
logger.Error(string.Empty, e);
throw;
}
}
}
}
フロImplemnetation
namespace Tools.CastleWindsor.Interceptors
{
using Castle.Core.Logging;
public class LoggingInterceptor : AbstractLoggingInterceptor
{
public LoggingInterceptor(ILoggerFactory logFactory) : base(logFactory)
{
}
}
}
ログイン方法
namespace Tools.CastleWindsor.Interceptors
{
using Castle.Core.Interceptor;
using Castle.Core.Logging;
using System.Linq;
public class MethodLoggingInterceptor : AbstractLoggingInterceptor
{
private readonly string[] methodNames;
public MethodLoggingInterceptor(string[] methodNames, ILoggerFactory logFactory) : base(logFactory)
{
this.methodNames = methodNames;
}
public override void Intercept(IInvocation invocation)
{
if ( methodNames.Contains(invocation.Method.Name) )
base.Intercept(invocation);
}
}
}
他のヒント
+1postsharp.て活用されている複数のものを含む一部のみ追加の前提条件とpostconditions C#コード)という思いない---
で範囲をどのように長い開発支援プロジェクトです。確かに、IL織は嬉しい技術がされなかった場合はどうなりIL及び/又は組立メタデータ形式の変更もなかったと1.1、2.0、こういった変化のツールと互換性のない、新しい形式です。
場合は、ツールを防いでくれるのですからア技術までのツールするとともに、それを支援すとの保証を与えるうるおいがもの足りないところは今もその発展は続いていくものであろう)しているものを警戒して使用できるし、長期プロジェクト.
短期的には問題ないものです。
使用することができるようになりますそうです。作品!私は強く推薦しています!