c# - 如何为 Unity 中的所有注册类型配置日志拦截器?

标签 c# unity-container aop ioc-container

我将跟踪在由 Unity 容器管理的服务中发生的每个操作,作为文件系统中的日志。我想我可以定义一个名为 IService 的接口(interface),所有其他接口(interface)或实现都应该继承自他。另一方面,我想开发一个自定义拦截行为或调用处理程序来将日志保存到文件中。

不幸的是,我发现使用这些代码对我不起作用

IUnityContainer unity = new UnityContainer();

//Interception
unity.AddNewExtension<Interception>();
Interception interception = unity.Configure<Interception>();
unity.RegisterType<IService>(
    new DefaultInterceptor(new InterfaceInterceptor()),
    new DefaultInterceptionBehavior(new LoggingBehavior()));

string[] configFiles = Directory.GetFiles(".", "*.config");
foreach (string configFile in configFiles)
{
    var fileMap = new ExeConfigurationFileMap { ExeConfigFilename = configFile };
    System.Configuration.Configuration configuration =
        ConfigurationManager.OpenMappedExeConfiguration(fileMap,  
        ConfigurationUserLevel.None);
    var unitySection = (UnityConfigurationSection)
        configuration.GetSection("unity");
    unity = unitySection.Configure(unity);
}

IGateway imapGW = unity.Resolve<IGateway>("ImapGateway");

我在Unity中使用拦截器是不是有什么误解?我该如何处理这个问题以自动记录所有内容而无需为每个服务配置拦截器?

最佳答案

有很多方法可以实现记录器。很久以前我写了一篇关于如何设置拦截器的文章:

http://hmadrigal.wordpress.com/2010/12/25/aspect-oriented-programming-and-interceptor-design-pattern-with-unity-2/

对于日志记录,您可以使用 Debug.Write,并配置 TraceListeners。或者您也可以使用企业库或任何第三方日志库。

亲切的问候, 赫伯

关于c# - 如何为 Unity 中的所有注册类型配置日志拦截器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11186918/

相关文章:

spring-security - 将静态编织与 spring-security 结合使用

c# - 如何获取已阅读的内容

c# - 将字符串转换为 int 然后乘以另一个 int

inheritance - 为某个基类的所有后代配置 Unity 注入(inject)

c# - PostSharp 和 CaSTLe 动态代理有什么区别?

java - super() 调用 Java API 的切入点

c# - 将数据集转换为 XML

c# - 遍历 DataContract 类

c# - 依赖注入(inject) Unity - 条件解析

c# - 包括使用 PostSharp、Log4Net 和 Unity 的附加属性