Skip to content

Commit 3b2f35c

Browse files
committed
OptionsBuilder support.
1 parent 6ba6852 commit 3b2f35c

7 files changed

+56
-6
lines changed

Diff for: Directory.Build.props

+3-3
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@
66
<RepoRoot>$([System.IO.Path]::GetFullPath('$(MSBuildThisFileDirectory)..\'))</RepoRoot>
77
<PathMap>$(RepoRoot)=.</PathMap>
88
<LangVersion>latest</LangVersion>
9-
<AssemblyVersion>1.0.0.0</AssemblyVersion>
10-
<FileVersion>1.0.0.0</FileVersion>
11-
<Version>1.0.0.0</Version>
9+
<AssemblyVersion>1.0.0.1</AssemblyVersion>
10+
<FileVersion>1.0.0.1</FileVersion>
11+
<Version>1.0.0.1</Version>
1212
</PropertyGroup>
1313
</Project>

Diff for: Directory.Build.targets

+1
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
<ItemGroup>
33
<PackageReference Update="DryIoc.Microsoft.DependencyInjection" Version="4.1.0" />
44
<PackageReference Update="Microsoft.Extensions.DependencyInjection" Version="3.1.6" />
5+
<PackageReference Update="Microsoft.Extensions.Options.ConfigurationExtensions" Version="3.1.6" />
56
<PackageReference Update="Microsoft.NET.Test.Sdk" Version="16.5.0" />
67
<PackageReference Update="MSTest.TestAdapter" Version="2.1.0" />
78
<PackageReference Update="MSTest.TestFramework" Version="2.1.0" />

Diff for: DryIoc.Microsoft.DependencyInjection.Extension/ServiceCollectionExtensions.cs

+3-3
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ static void RegisterDescriptorMany(IContainer container, ServiceDescriptor descr
6363
ServiceLifetime.Scoped => Reuse.ScopedOrSingleton,
6464
_ => Reuse.Transient
6565
};
66-
container.Register(descriptor.ServiceType, descriptor.ImplementationType, reuse, ifAlreadyRegistered: IfAlreadyRegistered.AppendNewImplementation);
66+
container.Register(descriptor.ServiceType, descriptor.ImplementationType, reuse, ifAlreadyRegistered: IfAlreadyRegistered.AppendNotKeyed);
6767
}
6868
else if (descriptor.ImplementationFactory is { })
6969
{
@@ -73,11 +73,11 @@ static void RegisterDescriptorMany(IContainer container, ServiceDescriptor descr
7373
ServiceLifetime.Scoped => Reuse.ScopedOrSingleton,
7474
_ => Reuse.Transient
7575
};
76-
container.RegisterDelegate(true, descriptor.ServiceType, descriptor.ImplementationFactory, reuse, ifAlreadyRegistered: IfAlreadyRegistered.AppendNewImplementation);
76+
container.RegisterDelegate(true, descriptor.ServiceType, descriptor.ImplementationFactory, reuse, ifAlreadyRegistered: IfAlreadyRegistered.AppendNotKeyed);
7777
}
7878
else
7979
{
80-
container.RegisterInstance(true, descriptor.ServiceType, descriptor.ImplementationInstance, ifAlreadyRegistered: IfAlreadyRegistered.AppendNewImplementation);
80+
container.RegisterInstance(true, descriptor.ServiceType, descriptor.ImplementationInstance, ifAlreadyRegistered: IfAlreadyRegistered.AppendNotKeyed);
8181
}
8282
}
8383
static void RegisterDescriptor(IContainer container, ServiceDescriptor descriptor)

Diff for: DryIoc.Microsoft.DependencyInjection.Tests/DryIoc.Microsoft.DependencyInjection.Extension.Tests.csproj

+1
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
<PackageReference Include="MSTest.TestAdapter" />
1212
<PackageReference Include="MSTest.TestFramework" />
1313
<PackageReference Include="coverlet.collector"/>
14+
<PackageReference Include="Microsoft.Extensions.Options.ConfigurationExtensions"/>
1415
</ItemGroup>
1516

1617
<ItemGroup>

Diff for: DryIoc.Microsoft.DependencyInjection.Tests/ServiceCollectionExtensionsTests.cs

+23
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
using Microsoft.Extensions.DependencyInjection;
2+
using Microsoft.Extensions.Options;
23
using Microsoft.VisualStudio.TestTools.UnitTesting;
34
using System.Collections.Generic;
45
using System.Linq;
@@ -225,5 +226,27 @@ class B2<T> : IB<T>
225226
public T Value { get; set; } = default!;
226227

227228
}
229+
[TestMethod()]
230+
public void RegisterServices_Options_Test()
231+
{
232+
var Container = CreateContainer();
233+
Container.RegisterServices(v =>
234+
{
235+
v.AddOptions<Config>()
236+
.Configure(config => config.Value1 = "test1")
237+
.Configure(config => config.Value2 = "test2")
238+
.PostConfigure(config => config.Value3 = "test3");
239+
});
240+
var Config = Container.Resolve<IOptions<Config>>();
241+
Assert.AreEqual(Config.Value.Value1, "test1");
242+
Assert.AreEqual(Config.Value.Value2, "test2");
243+
Assert.AreEqual(Config.Value.Value3, "test3");
244+
}
245+
class Config
246+
{
247+
public string Value1 { get; set; } = string.Empty;
248+
public string Value2 { get; set; } = string.Empty;
249+
public string Value3 { get; set; } = string.Empty;
250+
}
228251
}
229252
}

Diff for: Prism.DryIoc.Tests/DryIoc.Microsoft.DependencyInjection.Extension.Prism.DryIoc.Tests.csproj

+1
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
<PackageReference Include="MSTest.TestFramework" />
1313
<PackageReference Include="coverlet.collector" />
1414
<PackageReference Include="Prism.DryIoc" />
15+
<PackageReference Include="Microsoft.Extensions.Options.ConfigurationExtensions"/>
1516
</ItemGroup>
1617

1718
<ItemGroup>

Diff for: Prism.DryIoc.Tests/ServiceCollectionExtensionsTests.cs

+24
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
using System.Collections.Generic;
77
using System.Linq;
88
using DryIoc.Microsoft.DependencyInjection.Extension;
9+
using Microsoft.Extensions.Options;
910

1011
namespace DryIoc.Microsoft.DependencyInjection.Extension.Prism.Dryioc.Tests
1112
{
@@ -242,5 +243,28 @@ class B2<T> : IB<T>
242243
{
243244
public T Value { get; set; } = default!;
244245
}
246+
[TestMethod()]
247+
public void RegisterServices_Options_Test()
248+
{
249+
var Container = CreateContainerExtension();
250+
IContainerRegistry Registry = Container;
251+
Registry.GetContainer().RegisterServices(v =>
252+
{
253+
v.AddOptions<Config>()
254+
.Configure(config => config.Value1 = "test1")
255+
.Configure(config => config.Value2 = "test2")
256+
.PostConfigure(config => config.Value3 = "test3");
257+
});
258+
var Config = Container.Resolve<IOptions<Config>>();
259+
Assert.AreEqual(Config.Value.Value1, "test1");
260+
Assert.AreEqual(Config.Value.Value2, "test2");
261+
Assert.AreEqual(Config.Value.Value3, "test3");
262+
}
263+
class Config
264+
{
265+
public string Value1 { get; set; } = string.Empty;
266+
public string Value2 { get; set; } = string.Empty;
267+
public string Value3 { get; set; } = string.Empty;
268+
}
245269
}
246270
}

0 commit comments

Comments
 (0)