ConfigurationManager.AppSettings
独自のファイルを持つMEFプラグインからオブジェクトの値にアクセスしたいと思いapp.config
ます。
ただし、プラグインがロードされた後、app.config
ファイルのキーはに存在しません。AppSettings
プラグインをロードするアプリケーションからのキーはまだ存在しています。
Settings.settings
ファイルを使用すると、ファイルを介してこの動作が可能app.config
になるため、ファイルを何らかの方法でロードする必要があることに気付きました。
私のプラグインは次のようになります:
[Export(IPlugin)]
public class Plugin
{
public Plugin()
{
// reads successfully from app.config via Settings object
var value1 = Settings.Default["Key1"];
// returns null from app.config via ConfigurationManager
var value1 = ConfigurationManager.AppSettings["Key2"]
}
}
このapp.config
ように見えます:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<sectionGroup name="applicationSettings" type="..." >
<section name="Plugin.Settings" type="..." />
</sectionGroup>
</configSections>
<appSettings>
<add key="Key2" value="Fails" />
</appSettings>
<applicationSettings>
<Plugin.Settings>
<setting name="Key1" serializeAs="String">
<value>Works</value>
</setting>
</Plugin.Settings>
</applicationSettings>
</configuration>
app.config
次のコマンドでファイルを手動でロードできます。
var config = ConfigurationManager.OpenExeConfiguration("Plugin.dll");
var value = AppSettings.Settings["Key2"].Value
しかし、これは解決策というよりは回避策のようです。
<appSettings>
プラグイン内からMEFプラグインに直接アクセスする方法はありますか?そうでない場合、何が推奨されますか?