私はこのようにlog4netのために与えるための型パラメータを持つLogManagerのクラスがあります。どのようにシングルトンクラスで過渡ロガーを使用するには、シンプルなインジェクター
public class LogManager<T> : ILogManager
{
private ILog Logger { get; set; }
public LogManager()
{
Logger = LogManager.GetLogger(typeof(T));
}
}
を私は条件としてこのロガーを登録します。
container.RegisterConditional(typeof(ILogManager),
c => typeof(LogManager<>).MakeGenericType(c.Consumer.ImplementationType),
Lifestyle.Transient,
c => true);
それは私のコントローラのconstuctorsにログマネージャを注入し、それを使用するように動作します。しかし問題がある。私は、ログマネージャを使うべきシングルトンクラスもたくさん持っていますが、ログマネージャの寿命が短く、シンプルインジェクタではできません。
提案されている解決策は、ログファクトリクラスを他のシングルトンに注入し、悪い考えのように聞こえるたびに工場に電話をかけることです。私は何もしたくないときに_logFactory.GetLogger()。Debug( "log")を実行する必要があります。あるいは、この解決策について何か不足していますか?
他の提案された解決策は、意味を持たないシングルトンクラスを一時的にすることです。
私はどのように進めるべきですか?私のデザインに何か問題はありますか?あなたが登録シングルトンにする必要があります
Sooo ...「LogManager」をシングルトンとして登録してみませんか? –
Steven
これを行うと、ロギングを行うクラス情報が失われました。 – gmnnn
これはテストしましたか? Log4netのLoggerクラスはスレッドセーフであり、各 'T'は独自の' LogManager 'インスタンスを取得します。 –
Steven