ServiceStack AppHostは、サービスの構築時にサービスに注入できるタイプを登録するためのFunq.Containerを提供します。このコンテナを使用して、それが存在するタイプに適したILogを返すILogファクトリを登録できますか?
別の言い方をすれば、次のAppHostが与えられます。
public class AppHost : AppHostBase
{
public AppHost() : base("Example Web Services", Assembly.GetExecutingAssembly())
{
}
public override void Configure(Funq.Container container)
{
var baseLogFactory = new ServiceStack.Logging.NLogger.NLogFactory();
LogManager.LogFactory = new ServiceStack.Logging.Elmah.ElmahLogFactory(baseLogFactory);
// Would prefer to register a Func<Type, ILog> one time here
}
}
そしてサービス:
public class FooService : IService<FooRequest>
{
static ILog Log { get { return LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); } }
// Would prefer:
// public ILog { get; set; }
public object Execute(FooRequest request)
{
Log.Info("Received request: " + request.Dump());
return new FooResponse();
}
}
すべてのサービスで静的ILogボイラープレートを回避するためにAppHost.Configureに追加できるものはありますか(代わりに、単純な古いILogプロパティを使用します)?
3つ目の方法として、最も簡潔に言えば、LogManagerの代わりにFunq.ContainerをILogインジェクションに使用できますか?