Skip to content

Commit a97a021

Browse files
committed
Clean up the persistence services and make it use PersistancePathProvider. Update the registration.
1 parent 21b728e commit a97a021

File tree

6 files changed

+34
-24
lines changed

6 files changed

+34
-24
lines changed

Rubberduck.Main/Extension.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -145,7 +145,7 @@ private void InitializeAddIn()
145145
return;
146146
}
147147

148-
var configLoader = new XmlPersistanceService<GeneralSettings>
148+
var configLoader = new XmlPersistanceService<GeneralSettings>()
149149
{
150150
FilePath =
151151
Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData),

Rubberduck.Main/Root/RubberduckIoCInstaller.cs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ public void Install(IWindsorContainer container, IConfigurationStore store)
8484
ActivateAutoMagicFactories(container);
8585
OverridePropertyInjection(container);
8686

87-
RegisterConstantVbeAndAddIn(container);
87+
RegisterInstances(container);
8888
RegisterAppWithSpecialDependencies(container);
8989
RegisterUnitTestingComSide(container);
9090

@@ -850,15 +850,16 @@ private void RegisterAppWithSpecialDependencies(IWindsorContainer container)
850850
.LifestyleSingleton());
851851
}
852852

853-
private void RegisterConstantVbeAndAddIn(IWindsorContainer container)
853+
private void RegisterInstances(IWindsorContainer container)
854854
{
855855
container.Register(Component.For<IVBE>().Instance(_vbe));
856856
container.Register(Component.For<IAddIn>().Instance(_addin));
857857
//note: This registration makes Castle Windsor inject _vbe_CommandBars in all ICommandBars Parent properties.
858858
container.Register(Component.For<ICommandBars>().Instance(_vbe.CommandBars));
859859
container.Register(Component.For<IUiContextProvider>().Instance(UiContextProvider.Instance()).LifestyleSingleton());
860860
container.Register(Component.For<IVBEEvents>().Instance(VBEEvents.Initialize(_vbe)).LifestyleSingleton());
861-
container.Register(Component.For<ITempSourceFileHandler>().Instance(_vbe.TempSourceFileHandler));
861+
container.Register(Component.For<ITempSourceFileHandler>().Instance(_vbe.TempSourceFileHandler).LifestyleSingleton());
862+
container.Register(Component.For<IPersistancePathProvider>().Instance(PersistancePathProvider.Instance).LifestyleSingleton());
862863
}
863864
}
864865
}

Rubberduck.SettingsProvider/PersistancePathProvider.cs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,13 @@ namespace Rubberduck.SettingsProvider
55
{
66
public class PersistancePathProvider : IPersistancePathProvider
77
{
8+
private static readonly Lazy<IPersistancePathProvider> LazyInstance;
9+
10+
static PersistancePathProvider()
11+
{
12+
LazyInstance = new Lazy<IPersistancePathProvider>(() => new PersistancePathProvider());
13+
}
14+
815
public string DataRootPath => Path.Combine(
916
Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData),
1017
"Rubberduck");
@@ -13,5 +20,7 @@ public string DataFolderPath(string folderName)
1320
{
1421
return Path.Combine(DataRootPath, folderName);
1522
}
23+
24+
public static IPersistancePathProvider Instance => LazyInstance.Value;
1625
}
1726
}

Rubberduck.SettingsProvider/XmlContractPersistanceService.cs

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,12 +24,11 @@ public override string FilePath
2424

2525
public override T Load(T toDeserialize)
2626
{
27-
var defaultOutput = CachedOrNotFound();
28-
if (defaultOutput != null)
27+
if (!File.Exists(FilePath))
2928
{
30-
return defaultOutput;
29+
return Cached;
3130
}
32-
31+
3332
try
3433
{
3534
using (var stream = new FileStream(FilePath, FileMode.Open, FileAccess.Read))

Rubberduck.SettingsProvider/XmlPersistanceService.cs

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -7,29 +7,24 @@
77

88
namespace Rubberduck.SettingsProvider
99
{
10-
public class XmlPersistanceService<T> : XmlPersistanceServiceBase<T> where T : class, IEquatable<T>, new()
10+
public class XmlPersistanceService<T> : XmlPersistanceServiceBase<T>
11+
where T : class, IEquatable<T>, new()
1112
{
1213
public override T Load(T toDeserialize)
1314
{
14-
var defaultOutput = CachedOrNotFound();
15-
if (defaultOutput != null)
16-
{
17-
return defaultOutput;
18-
}
19-
2015
var doc = GetConfigurationDoc(FilePath);
2116
var node = GetNodeByName(doc, typeof(T).Name);
2217
if (node == null)
2318
{
24-
return FailedLoadReturnValue();
19+
return Cached;
2520
}
2621

2722
using (var reader = node.CreateReader())
2823
{
2924
var deserializer = new XmlSerializer(typeof(T));
3025
try
3126
{
32-
Cached = (T)Convert.ChangeType(deserializer.Deserialize(reader), typeof(T));
27+
Cached = (T)deserializer.Deserialize(reader);
3328
return Cached;
3429
}
3530
catch

Rubberduck.SettingsProvider/XmlPersistanceServiceBase.cs

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ namespace Rubberduck.SettingsProvider
1313
{
1414
private const string DefaultConfigFile = "rubberduck.config";
1515

16-
protected readonly string RootPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "Rubberduck");
16+
protected readonly string RootPath;
1717
protected static readonly UTF8Encoding OutputEncoding = new UTF8Encoding(false);
1818
protected const string RootElement = "Configuration";
1919

@@ -28,6 +28,12 @@ namespace Rubberduck.SettingsProvider
2828

2929
protected T Cached { get; set; }
3030

31+
protected XmlPersistanceServiceBase()
32+
{
33+
var pathProvider = PersistancePathProvider.Instance;
34+
RootPath = pathProvider.DataRootPath;
35+
}
36+
3137
private string _filePath;
3238
public virtual string FilePath
3339
{
@@ -41,11 +47,16 @@ public virtual string FilePath
4147

4248
protected static T FailedLoadReturnValue()
4349
{
44-
return (T)Convert.ChangeType(null, typeof(T));
50+
return new T();
4551
}
4652

4753
protected static XDocument GetConfigurationDoc(string file)
4854
{
55+
if (!File.Exists(file))
56+
{
57+
return new XDocument();
58+
}
59+
4960
XDocument output;
5061
try
5162
{
@@ -78,10 +89,5 @@ protected void EnsurePathExists()
7889
Directory.CreateDirectory(folder);
7990
}
8091
}
81-
82-
protected T CachedOrNotFound()
83-
{
84-
return !File.Exists(FilePath) ? FailedLoadReturnValue() : Cached;
85-
}
8692
}
8793
}

0 commit comments

Comments
 (0)