Ken*_*nic 20 c# log4net dependency-injection castle-windsor unity-container
最终这与设置log4Net有关,但一般来说问题不是特定于日志记录.
一般来说,我想弄清楚的是在Microsoft Unity 2.0中,如何做到与Castle.Facilities.Logging.LoggingFacility相同的东西.即能够声明对记录器的依赖性并使用其注入的对象的Type初始化记录器.
本着考试的精神值得千言万语,这就是我所需要的:
class Logger_IOC_Tests
{
//[Test]
public void Logger_should_be_initialized_with_the_type_of_the_object_that_is_using_it()
{
var container = new UnityContainer();
/* Configuration Magic probably involiving registering either
* a custom IDependencyResolverPolicy or BuilderStrategy
* goes here...
*/
container.RegisterType<LoggerUser>(new ContainerControlledLifetimeManager());
var user = container.Resolve<LoggerUser>();
Assert.True(user.Logger.GetUserType() == user.GetType());
}
}
interface ILogger
{
Type GetUserType();
}
class Logger : ILogger
{
private readonly Type _type;
public Logger(Type type)
{
_type = type;
}
public Type GetUserType()
{
return _type;
}
}
class LoggerUser
{
public readonly ILogger Logger;
public LoggerUser(ILogger logger)
{
Logger = logger;
}
}
Run Code Online (Sandbox Code Playgroud)
wag*_*ghe 15
我不知道你是否正在寻找这个,但几个月前我就看到它了,当我看到你的问题时,它被提醒了.我没有使用Unity,所以我无法真正比较你发布的内容和链接中的内容.希望它对您有用:
http://davidkeaveny.blogspot.com/2011/03/unity-and-log4net.html
我一直在努力实现与ILog使用Unity构造函数注入将正确配置的实例插入依赖项相同的结果.
最后,我编写了自己的"log4net"统一扩展来完成这一点(部分灵感来自另一位回答者Kenneth Baltrinic编写的博客文章).
这允许您使用Unity注册一次扩展:
var container = new UnityContainer();
container.AddNewExtension<Log4NetExtension>();
Run Code Online (Sandbox Code Playgroud)
然后传入正确的ILog记录器实例:
public class MyClass
{
private readonly ILog logger;
public MyClass(ILog logger)
{
this.logger = logger;
}
}
Run Code Online (Sandbox Code Playgroud)
扩展可以在这里找到:
https://github.com/roblevine/UnityLoggingExtensions
更多信息:http://blog.roblevine.co.uk/net/using-log4net-with-unity/
编辑现在可以作为NuGet包使用
| 归档时间: |
|
| 查看次数: |
27634 次 |
| 最近记录: |