簡體   English   中英

如何使用ServiceStack和Funq.Container解析ILog

[英]How can I resolve ILog using ServiceStack and Funq.Container

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();
    }
}

有什么我可以添加到AppHost.Configure的方法來避免我所有服務中的靜態ILog模板(而是僅使用普通的舊ILog屬性)?

簡而言之,我可以使用第三種方式來代替IManager使用Funq.Container進行ILog注入嗎?

container.Register<ILog>(
    ctx => LogManager.LogFactory.GetLogger(typeof(IService))
);

現在您的服務可能如下所示:

public class FooService : IService<FooRequest>
{
    public ILog { get; set; }

    public object Execute(FooRequest request)
    {
        Log.Info("Received request: " + request.Dump());
        return new FooResponse();
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM