私はPrism 2.1からPrism 4に変換しています.Log4Net用のILoggerFacadeクラスを作成する必要があります。 Prism 2.1の私の古いコードはもはや動作しません。誰でもILoggerFacadeクラスのサンプルコードを持っていますか?ご協力いただきありがとうございます。プリズム4 Log4Net用ILoggerFacade?
9
A
答えて
23
私はそれを理解しました。 Prism 2によく似ています。まず、ILoggerFacadeを実装するカスタムロガークラスを作成します。ここに私のクラスです:
using log4net;
using Microsoft.Practices.Prism.Logging;
namespace FsNoteMaster3
{
class Log4NetLogger : ILoggerFacade
{
#region Fields
// Member variables
private readonly ILog m_Logger = LogManager.GetLogger(typeof(Log4NetLogger));
#endregion
#region ILoggerFacade Members
/// <summary>
/// Writes a log message.
/// </summary>
/// <param name="message">The message to write.</param>
/// <param name="category">The message category.</param>
/// <param name="priority">Not used by Log4Net; pass Priority.None.</param>
public void Log(string message, Category category, Priority priority)
{
switch (category)
{
case Category.Debug:
m_Logger.Debug(message);
break;
case Category.Warn:
m_Logger.Warn(message);
break;
case Category.Exception:
m_Logger.Error(message);
break;
case Category.Info:
m_Logger.Info(message);
break;
}
}
#endregion
}
}
その後、プリズム4ブートストラップクラスで、カスタムロガークラスの新しいインスタンスを返すCreateLogger()
方法にオーバーライドを追加します。
protected override Microsoft.Practices.Prism.Logging.ILoggerFacade CreateLogger()
{
return new Log4NetLogger();
}
注カスタムであることLoggerクラス、ILog
はLog4Netインターフェイス、LogManager
はLog4Netオブジェクトです。
独自のコードからカスタムロガーに書き込む(Prismは独自のログエントリを処理します)、Prism 2.1と少し異なります。 IoCコンテナから直接ロガーを解決することも、ServiceLocatorを使用することもできます。 ServiceLocator
には、コンテナに依存しないという利点があります。これは、基本となるコンテナが実際には問題ではないことを意味します。ここでのServiceLocatorを使用してロガーを解決する例を示します。
var logger = (Log4NetLogger)ServiceLocator.Current.GetInstance(typeof(ILoggerFacade));
logger.Log("App.OnStartup() completed", Category.Info ,Priority.None);
ServiceLocator
は、ホストプロジェクトがMicrosoft.Practices.ServiceLocation.dllと一致using
声明への参照を持っていることが必要です。
関連する問題
- 1. プリズム4 - ローカルスコープリージョンマネージャ
- 2. 移行プリズム4 - CompositePresentationEvent
- 3. プリズムのモジュール依存関係
- 4. プリズム4モジュールを.resxファイルでローカライズ
- 5. するDataTemplate(XF /プリズム)Xamarinフォームのプリズムを用い
- 6. プリズム4で注入を観察し、依存を避ける
- 7. C#+ WPF + MVVC +プリズムを使用したWindowsアプリケーション開発に最適な方法4?
- 8. プリズム1X(WPF 1.0向け複合アプリケーションガイダンス)を4.Xにアップグレード
- 9. プリズムXF:
- 10. プリズムXamarinは、ビューがプリズム6.3.0 OnNavigatedTo
- 11. プリズム/ MEF -
- 12. プリズムViewModelエントリポイント/リザルトポイント
- 13. プリズム。ネイティブレイアウトのフォーム
- 14. プリズムとエンティティフレームワーク
- 15. プリズムwith ASP.NET
- 16. プリズム:ViewModelLocator.AutowireViewModel =「true」の
- 17. プリズムとXamarin.Forms:IApplicationLifecycle
- 18. プリズムのシェルレスUI
- 19. プリズムとシンプルインジェクタ
- 20. Delphiプリズムの例
- 21. プリズムMVVM構造
- 22. プリズムは主にSilverlight用ですか?
- 23. プリズムを使用したMasterDetailナビゲーション
- 24. プリズムなしでユニティを使用する
- 25. マルチプロジェクトソリューションでlog4netを使用
- 26. エンティティフレームワークを使用したlog4Net
- 27. プリズムに基づくSilverlightアプリケーションでのモジュール間のスタイルの共有4
- 28. プリズムとエスリGetElevationAsync(mapPoint)
- 29. アドインでlog4netを使用した.Netアドインフレームワーク
- 30. log4netカスタムロギング
このDavidに感謝します。 – JohnC
ありがとうございます、なぜあなたは 'Log4NetLogger'にキャストしていますか?ロギングソリューションが変更された場合、すべてのロガーインスタンスを別のタイプに再度キャストするか、キャストコードを削除する必要があります。 – Jalal
実際、なぜあなたはキャストしますか?これは、Log4NetLoggerを定義するアセンブリへの参照を必要とすることを暗示します。これは、目的を全滅させます... – Kris