注入依赖(NLOG)到动态加载类型中
-
26-10-2019 - |
题
我的解决方案中有某种插件体系结构。有一个众所周知的文件夹在其中放置插件。该插件实现了一个在主机项目中共享的接口。
最初我通过 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>
不隶属于 StackOverflow