ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

插入依赖项(NLog)到动态加载的类型

2019-12-02 03:09:13  阅读:328  来源: 互联网

标签:plugin-architecture dependency-injection nlog dynamic c


我的解决方案中有某种插件架构.
有一个著名的文件夹,可在其中放置插件.
插件实现了在宿主项目中共享的接口.

最初我通过Assembly.LoadFrom(fi.FullName).GetTypes()加载插件
并通过(IPlugin)Activator.CreateInstance(type);实例化所需的类型.

因此,主机(主应用程序)可以执行由插件程序集实现的适当代码.到目前为止,这个工作正常.

但是最近我尝试通过NLog实现应用程序日志记录,并在主机项目中配置了NLog,效果很好.

问题是我想在插件程序集中使用(已配置的)记录器.
如果我只是引用NLog并通过LogManager.GetCurrentClassLogger();使用它;似乎没有配置设置.它不会从插件程序集登录到我在主机项目中配置的文件.

我想尝试将NLogger实例(在宿主项目中创建)注入到插件类型的属性中.

这是可能的还是有实现这种目标的首选方法?
谢谢

解决方法:

这应该工作-NLog配置也应该对已加载的插件程序集有效.
问题可能与插件的加载方式有关.也许它们在单独的域中(我不记得它是如何工作的),所以NLog无法访问您的主应用程序的日志记录配置.

在这种情况下,您可以尝试为插件程序集添加单独的nlog配置文件(请参阅有关配置文件命名约定的nlog文档).

我认为IOC容器在动态加载插件的情况下不会帮助您-容器不会了解它们,因此您必须更改插件的加载和配置方式.恕我直言,使用IOC配置nlog并不是一个好主意.

如果先前的选项不起作用,您可以尝试更改app.config中的程序集探测路径,以便将插件加载到默认域中-那么NLog应该适用于这些插件(至少对我有用):

<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
  <probing privatePath="Plugins" />
</assemblyBinding>

标签:plugin-architecture,dependency-injection,nlog,dynamic,c
来源: https://codeday.me/bug/20191202/2085326.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有