0

エンタープライズ ライブラリ ログ アプリケーション ブロックを使用して、メソッド パラメータ名、その値、および戻り値の型をログに記録する方法はありますか。以下にコードサンプルを提供しました。要件は、そのメソッドの入力パラメーター値とその戻り値の型の値をログに記録することです

// Complex Types
public class UserDetails
{
    public string UserName { get; set; }
    public int UserAge { get; set; }
    public string UserAddress { get; set; }
}
public class User
{
    public string UserId { get; set; }
    public string Pwd { get; set; }
}

//Interface
public interface IService
{
    UserDetails GetUserDetails(User ReqUser);
}

//Imp
public class Service : IService
    {

        [LogCallHandler(Categories = new string[] { "General" }, LogBeforeCall = true, LogAfterCall = true ,
         BeforeMessage = "This occurs before the call to the target object",AfterMessage="This occured after method call",IncludeParameters=true)]
        public UserDetails GetUserDetails(User ReqUser)
        {
            UserDetails oUD = new UserDetails();
            oUD.UserName = "hhh" + ReqUser.UserId;
            oUD.UserAge = 100;
            oUD.UserAddress = "HHHHHHHHHHHHHHHHHHHHHHH";
            return oUD;
        }

        #endregion
    }

//Usage
private void button2_Click(object sender, EventArgs e)
{
    IUnityContainer container = new UnityContainer().LoadConfiguration();
    container.AddNewExtension<EnterpriseLibraryCoreExtension>();
    IService service = container.Resolve<IService>();
    User nUser = new User();
    nUser.UserId = "TTTTT";
    nUser.Pwd = "XXXXX";
    UserDetails mm = service.GetUserDetails(nUser);

}

エンタープライズ ライブラリ ロギング アプリケーション ブロックを使用してこれを実装する方法を誰か説明してもらえますか?

4

2 に答える 2

0

コードで EntLib LogCallHandler を使用できます。

container.AddNewExtension<EnterpriseLibraryCoreExtension>();
container.RegisterType<IService, Service>(
    new InterceptionBehavior<PolicyInjectionBehavior>(),
    new Interceptor<TransparentProxyInterceptor>());

または設定ファイルで:

<unity>
    <sectionExtension type="Microsoft.Practices.Unity.InterceptionExtension.Configuration.InterceptionConfigurationExtension, Microsoft.Practices.Unity.Interception.Configuration" />
    <namespace name="LoggingCallHandler" />
    <assembly  name="LoggingCallHandler" />
    <container>
        <extension type="Interception" />
        <extension type="Microsoft.Practices.EnterpriseLibrary.Common.Configuration.Unity.EnterpriseLibraryCoreExtension, Microsoft.Practices.EnterpriseLibrary.Common" />
        <register type="IService" mapTo="Service">
            <interceptor type="TransparentProxyInterceptor" />
            <policyInjection />
        </register>
    </container>
</unity>

ここに、LoggingCallHandlerサービス クラスの名前空間/アセンブリがあります。または、次のようにタイプ エイリアスを定義することもできます。

<alias alias="Service" type="LoggingCallHandler.Service, LoggingCallHandler"/>
<alias alias="IService" type="LoggingCallHandler.IService, LoggingCallHandler"/>

ロギング ブロックの設定を含む完全な設定については、このまたはこのディスカッションを参照してください。

于 2013-04-10T21:37:12.213 に答える