Skip to content

Commit 5da44ae

Browse files
committed
Fix DI registration for Settings
1 parent 3ec19e6 commit 5da44ae

File tree

5 files changed

+26
-38
lines changed

5 files changed

+26
-38
lines changed

Rubberduck.Main/Root/RubberduckIoCInstaller.cs

Lines changed: 9 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -231,11 +231,13 @@ private void RegisterConfiguration(IWindsorContainer container, Assembly[] assem
231231
foreach (var assembly in assembliesToRegister)
232232
{
233233
container.Register(Classes.FromAssembly(assembly)
234-
.IncludeNonPublicTypes()
235-
.Where(type => type.Namespace == typeof(Configuration).Namespace
236-
&& type.NotDisabledOrExperimental(_initialSettings)
237-
&& type != typeof(ExperimentalTypesProvider))
238-
.WithService.AllInterfaces()
234+
.BasedOn(typeof(ConfigurationServiceBase<>))
235+
.WithServiceSelect((type, hierarchy) =>
236+
{
237+
// select closed generic interface
238+
return type.GetInterfaces().Where(iface => iface.IsGenericType
239+
&& iface.GetGenericTypeDefinition() == typeof(IConfigurationService<>));
240+
})
239241
.LifestyleSingleton());
240242

241243
experimentalTypes.AddRange(assembly.GetTypes()
@@ -259,12 +261,8 @@ private void RegisterConfiguration(IWindsorContainer container, Assembly[] assem
259261
.ImplementedBy(typeof(XmlContractPersistenceService<>))
260262
.LifestyleSingleton());
261263

262-
container.Register(Component.For<IConfigurationService<IndenterSettings>>()
263-
.ImplementedBy<IndenterConfigProvider>()
264-
.LifestyleSingleton());
265-
266-
container.Register(Component.For<IConfigurationService<UnitTesting.Settings.UnitTestSettings>>()
267-
.ImplementedBy<UnitTestConfigProvider>()
264+
container.Register(Component.For(typeof(IConfigurationService<Configuration>))
265+
.ImplementedBy(typeof(ConfigurationLoader))
268266
.LifestyleSingleton());
269267
}
270268

Rubberduck.SettingsProvider/Facade/ConfigurationServiceBase.cs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
using Rubberduck.Settings;
22
using System;
3-
using System.Threading;
43

54
namespace Rubberduck.SettingsProvider
65
{

Rubberduck.SettingsProvider/Facade/DefaultSettings.cs

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
using System.Collections.Generic;
1+
using System;
2+
using System.Collections.Generic;
23
using System.Linq;
34
using System.Reflection;
45

@@ -10,6 +11,17 @@ public interface IDefaultSettings<T>
1011
T Default { get; }
1112
}
1213

14+
public class FixedValueDefault<T> : IDefaultSettings<T>
15+
{
16+
public IEnumerable<T> Defaults { get => new[] { Default }; }
17+
public T Default { get; }
18+
19+
public FixedValueDefault(T value)
20+
{
21+
Default = value;
22+
}
23+
}
24+
1325
public class DefaultSettings<T, S> : IDefaultSettings<T>
1426
where S : System.Configuration.ApplicationSettingsBase
1527
{
Lines changed: 4 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,33 +1,12 @@
1-
using System;
1+
using Rubberduck.Settings;
22
using Rubberduck.SettingsProvider;
33

44
namespace Rubberduck.SmartIndenter
55
{
6-
public class IndenterConfigProvider : IConfigurationService<IndenterSettings>
6+
public class IndenterConfigProvider : ConfigurationServiceBase<IndenterSettings>
77
{
8-
private readonly IPersistenceService<IndenterSettings> _persister;
9-
108
public IndenterConfigProvider(IPersistenceService<IndenterSettings> persister)
11-
{
12-
_persister = persister;
13-
}
14-
15-
public event EventHandler<ConfigurationChangedEventArgs> SettingsChanged;
16-
17-
public IndenterSettings Read()
18-
{
19-
var prototype = new IndenterSettings(false);
20-
return _persister.Load(prototype) ?? prototype;
21-
}
22-
23-
public IndenterSettings ReadDefaults()
24-
{
25-
return new IndenterSettings(false);
26-
}
27-
28-
public void Save(IndenterSettings settings)
29-
{
30-
_persister.Save(settings);
31-
}
9+
: base (persister, new FixedValueDefault<IndenterSettings>(new IndenterSettings(false)))
10+
{ }
3211
}
3312
}

0 commit comments

Comments
 (0)