2021-09-20 18:20:01 +02:00

86 lines
2.4 KiB
C#

using System;
using System.ComponentModel;
using System.ComponentModel.Composition;
using dnSpy.Contracts.MVVM;
using dnSpy.Contracts.Settings;
// Reads and writes the extension settings
namespace Example1.Extension {
class MySettings : ViewModelBase {
public bool BoolOption1 {
get => boolOption1;
set {
if (boolOption1 != value) {
boolOption1 = value;
OnPropertyChanged(nameof(BoolOption1));
}
}
}
bool boolOption1 = true;
public bool BoolOption2 {
get => boolOption2;
set {
if (boolOption2 != value) {
boolOption2 = value;
OnPropertyChanged(nameof(BoolOption2));
}
}
}
bool boolOption2 = false;
public string StringOption3 {
get => stringOption3;
set {
if (stringOption3 != value) {
stringOption3 = value;
OnPropertyChanged(nameof(StringOption3));
}
}
}
string stringOption3 = string.Empty;
public MySettings Clone() => CopyTo(new MySettings());
public MySettings CopyTo(MySettings other) {
other.BoolOption1 = BoolOption1;
other.BoolOption2 = BoolOption2;
other.StringOption3 = StringOption3;
return other;
}
}
// Export this class so it can be imported by other classes in this extension
[Export(typeof(MySettings))]
sealed class MySettingsImpl : MySettings {
//TODO: Use your own guid
static readonly Guid SETTINGS_GUID = new Guid("A308405D-0DF5-4C56-8B1E-8CE7BA6365E1");
readonly ISettingsService settingsService;
// Tell MEF to pass in the required ISettingsService instance exported by dnSpy
[ImportingConstructor]
MySettingsImpl(ISettingsService settingsService) {
this.settingsService = settingsService;
// Read the settings from the file or use the default values if our settings haven't
// been saved to it yet.
var sect = settingsService.GetOrCreateSection(SETTINGS_GUID);
BoolOption1 = sect.Attribute<bool?>(nameof(BoolOption1)) ?? BoolOption1;
BoolOption2 = sect.Attribute<bool?>(nameof(BoolOption2)) ?? BoolOption2;
StringOption3 = sect.Attribute<string>(nameof(StringOption3)) ?? StringOption3;
PropertyChanged += MySettingsImpl_PropertyChanged;
}
void MySettingsImpl_PropertyChanged(object? sender, PropertyChangedEventArgs e) {
// Save the settings
var sect = settingsService.RecreateSection(SETTINGS_GUID);
sect.Attribute(nameof(BoolOption1), BoolOption1);
sect.Attribute(nameof(BoolOption2), BoolOption2);
sect.Attribute(nameof(StringOption3), StringOption3);
}
}
}