Skip to content

Commit 674ac13

Browse files
committed
Set up IoC registration to provide Default settings
1 parent d75604c commit 674ac13

File tree

4 files changed

+30
-8
lines changed

4 files changed

+30
-8
lines changed

Rubberduck.Main/Extension.cs

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -149,12 +149,7 @@ private void InitializeAddIn()
149149
}
150150

151151
var pathProvider = PersistencePathProvider.Instance;
152-
var configLoader = new XmlPersistenceService<GeneralSettings>(pathProvider)
153-
{
154-
FilePath =
155-
Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData),
156-
"Rubberduck", "rubberduck.config")
157-
};
152+
var configLoader = new XmlPersistenceService<GeneralSettings>(pathProvider);
158153
var configProvider = new GeneralConfigProvider(configLoader);
159154

160155
_initialSettings = configProvider.Read();
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
using Castle.Core;
2+
using Castle.MicroKernel.Context;
3+
using Castle.MicroKernel.Handlers;
4+
using System;
5+
using System.Linq;
6+
7+
namespace Rubberduck.Root
8+
{
9+
class FixedGenericAppender : IGenericImplementationMatchingStrategy
10+
{
11+
private readonly Type[] closingGenerics;
12+
13+
public FixedGenericAppender(Type[] closingGenerics)
14+
{
15+
this.closingGenerics = closingGenerics;
16+
}
17+
18+
public Type[] GetGenericArguments(ComponentModel model, CreationContext context)
19+
{
20+
return context.GenericArguments.Union(closingGenerics).ToArray();
21+
}
22+
}
23+
}

Rubberduck.Main/Root/RubberduckIoCInstaller.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -244,6 +244,11 @@ private void RegisterConfiguration(IWindsorContainer container, Assembly[] assem
244244
.Where(t => Attribute.IsDefined(t, typeof(ExperimentalAttribute))));
245245
}
246246

247+
container.Register(Component.For(typeof(IDefaultSettings<>))
248+
.ImplementedBy(typeof(DefaultSettings<,>), new FixedGenericAppender(new[] { typeof(Properties.Settings) }))
249+
.IsFallback()
250+
.LifestyleTransient());
251+
247252
var provider = new ExperimentalTypesProvider(experimentalTypes);
248253
container.Register(Component.For(typeof(IExperimentalTypesProvider))
249254
.DependsOn(Dependency.OnComponent<ViewModelBase, GeneralSettingsViewModel>())

RubberduckTests/Settings/GeneralSettingsTests.cs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -168,13 +168,12 @@ public void AutoSavePeriodIsSetInCtor()
168168
public void UserSettingsLoadedUsingDefaultWhenMissingFile()
169169
{
170170
var pathProviderMock = new Mock<IPersistencePathProvider>();
171-
pathProviderMock.Setup(x => x.DataRootPath).Returns("C:\\rubberduck\\");
171+
pathProviderMock.Setup(x => x.DataRootPath).Returns(@"C:\some\non\existent\path\rubberduck");
172172
pathProviderMock.Setup(x => x.DataFolderPath(It.IsAny<string>())).Returns<string>(x => x);
173173
// For this test, we need to use the actual object. Fortunately, the path is virtual, so we
174174
// can override that property and force it to use an non-existent path to prove that settings
175175
// will be still created using defaults without the file present.
176176
var persisterMock = new Mock<XmlPersistenceService<GeneralSettings>>(pathProviderMock.Object);
177-
persisterMock.Setup(x => x.FilePath).Returns("C:\\some\\non\\existent\\path\\rubberduck");
178177
persisterMock.CallBase = true;
179178
var configProvider = new GeneralConfigProvider(persisterMock.Object);
180179

0 commit comments

Comments
 (0)