设置.Net应用程序,以便使用相同的应用程序配置(在Visual Studio中class Foo {
public $bar = array();
public function __construct() {}
public function add( $bar ) {
if (isset($this->bar[ $bar['ID'] ]) && $this->bar[ $bar['ID'] ] instanceof Baz ) { // inctanceof not working as i am expecting. supposed to modify duplicate occurrence
//if bar['ID'] is already instance of Baz then we are trying to modify bar ID before pass it so Baz.
$bar['ID'] = $bar['ID'] . rand();
$this->bar[$bar['ID']]= new Baz( $bar );
}
else {
$this->bar[ $bar['ID'] ] = new Baz( $bar );
}
}
}
- .exe.config
(重新)使用相同程序的多个实例。
在我们的场景中,我们需要使用自己的app.config
运行每个实例。这不是.Net被“开箱即用”的东西。然而,这个漂亮的小包装为我们提供了诀窍:https://stackoverflow.com/a/6151688/95008
这对我们来说很好,直到我们意识到NLog似乎不尊重app-config更改。我们在NLog的.exe.config
中添加了一个配置部分,这使得每个实例都可以使用不同的规则和目标登录到不同的位置。
但是,似乎NLog不尊重app-config的变化。我的猜测是内部不通过AppSettings API询问其配置部分,而是使用代码手动查找.exe.config
及其中的配置部分。
所以,似乎有三种选择:
答案 0 :(得分:0)
我的猜测是,它内部并没有通过AppSettings API询问其配置部分,而是使用代码手动查找.exe.config及其中的config-section。
这是正确的,因为NLog使用与NLog的配置相同的代码,无论是在web.config中还是在nlog.config中
在代码中重新加载配置很简单:
NLog.LogManager.Configuration.Reload();
如果在重新加载配置之前有记录器,
NLog.LogManager.ReconfigExistingLoggers()