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属性)?
第三种方式,也是最简洁的方式,我可以使用Funq.Container代替LogManager进行ILog注入吗?
发布于 2013-01-16 06:52:24
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();
}
}https://stackoverflow.com/questions/14348126
复制相似问题