![](/img/trans.png)
[英]ServiceStack multiple implementations of same interface in Funq.Container
[英]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.