Skip to content

Commit d107975

Browse files
authored
Merge pull request #18 from pfpack/release/v1.3.0-preview.1.0.0
release/v1.3.0-preview.1.0.0
2 parents 9507b05 + 4838654 commit d107975

File tree

9 files changed

+201
-3
lines changed

9 files changed

+201
-3
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
11
# PrimeFuncPack Dependency Registry
2-
PrimeFuncPack Dependency Registry is a library for .NET providing the dependency registrar targeted to both usual services and dependency trees build by PrimeFuncPack Dependency to register the dependencies in the .NET dependency injection mechanism.
2+
PrimeFuncPack Dependency Registry is a library for .NET providing the dependency registrar targeted to both usual services and dependency trees built by PrimeFuncPack Dependency to register the dependencies in the .NET dependency injection mechanism.

docs/dependency-registry/README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
# PrimeFuncPack Dependency Registry
2+
PrimeFuncPack Dependency Registry is a library for .NET providing the dependency registrar targeted to both usual services and dependency trees built by PrimeFuncPack Dependency to register the dependencies in the .NET dependency injection mechanism.
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
namespace PrimeFuncPack.DependencyRegistry.Tests;
2+
3+
public sealed partial class DependencyRegistrarTypedTest
4+
{
5+
}
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
using System;
2+
using PrimeFuncPack.UnitTest;
3+
using Xunit;
4+
using static PrimeFuncPack.UnitTest.TestData;
5+
6+
namespace PrimeFuncPack.DependencyRegistry.Tests;
7+
8+
partial class DependencyRegistrarTypedTest
9+
{
10+
[Fact]
11+
public void Create_ServicesAreNull_ExpectArgumentNullException()
12+
{
13+
var ex = Assert.Throws<ArgumentNullException>(
14+
() => _ = DependencyRegistrar<RefType>.Create(null!, _ => PlusFifteenIdRefType));
15+
16+
Assert.Equal("services", ex.ParamName);
17+
}
18+
19+
[Fact]
20+
public void Create_ResolverIsNull_ExpectArgumentNullException()
21+
{
22+
var mockServices = MockServiceCollection.CreateMock();
23+
var sourceServices = mockServices.Object;
24+
25+
var ex = Assert.Throws<ArgumentNullException>(
26+
() => _ = DependencyRegistrar<RecordType>.Create(sourceServices, null!));
27+
28+
Assert.Equal("resolver", ex.ParamName);
29+
}
30+
}
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
using System;
2+
using Microsoft.Extensions.DependencyInjection;
3+
using Moq;
4+
using PrimeFuncPack.UnitTest;
5+
using Xunit;
6+
using static PrimeFuncPack.UnitTest.TestData;
7+
8+
namespace PrimeFuncPack.DependencyRegistry.Tests;
9+
10+
partial class DependencyRegistrarTypedTest
11+
{
12+
[Theory]
13+
[InlineData(null)]
14+
[InlineData(SomeString)]
15+
public void RegisterScoped_ExpectSourceServices(string regService)
16+
{
17+
var mockServices = MockServiceCollection.CreateMock();
18+
var sourceServices = mockServices.Object;
19+
20+
var registrar = DependencyRegistrar<string>.Create(sourceServices, _ => regService);
21+
22+
var actualServices = registrar.RegisterScoped();
23+
Assert.Same(sourceServices, actualServices);
24+
}
25+
26+
[Theory]
27+
[InlineData(true)]
28+
[InlineData(false)]
29+
public void RegisterScoped_ExpectCallAddScopedOnce(bool isNotNull)
30+
{
31+
RefType regService = isNotNull ? ZeroIdRefType : null!;
32+
var mockServices = MockServiceCollection.CreateMock(
33+
sd =>
34+
{
35+
Assert.Equal(typeof(RefType), sd.ServiceType);
36+
Assert.Equal(ServiceLifetime.Scoped, sd.Lifetime);
37+
Assert.NotNull(sd.ImplementationFactory);
38+
39+
var actualService = sd.ImplementationFactory!.Invoke(Mock.Of<IServiceProvider>());
40+
Assert.Equal(regService, actualService);
41+
});
42+
43+
var sourceServices = mockServices.Object;
44+
var registrar = DependencyRegistrar<RefType>.Create(sourceServices, _ => regService);
45+
46+
_ = registrar.RegisterScoped();
47+
mockServices.Verify(s => s.Add(It.IsAny<ServiceDescriptor>()), Times.Once);
48+
}
49+
}
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
using System;
2+
using Microsoft.Extensions.DependencyInjection;
3+
using Moq;
4+
using PrimeFuncPack.UnitTest;
5+
using Xunit;
6+
using static PrimeFuncPack.UnitTest.TestData;
7+
8+
namespace PrimeFuncPack.DependencyRegistry.Tests;
9+
10+
partial class DependencyRegistrarTypedTest
11+
{
12+
[Theory]
13+
[InlineData(true)]
14+
[InlineData(false)]
15+
public void RegisterSingleton_ExpectSourceServices(bool isNotNull)
16+
{
17+
var mockServices = MockServiceCollection.CreateMock();
18+
var sourceServices = mockServices.Object;
19+
20+
object regService = isNotNull ? new object() : null!;
21+
var registrar = DependencyRegistrar<object>.Create(sourceServices, _ => regService);
22+
23+
var actualServices = registrar.RegisterSingleton();
24+
Assert.Same(sourceServices, actualServices);
25+
}
26+
27+
[Theory]
28+
[InlineData(true)]
29+
[InlineData(false)]
30+
public void RegisterSingleton_ExpectCallAddSingletonOnce(bool isNotNull)
31+
{
32+
RecordType regService = isNotNull ? PlusFifteenIdLowerSomeStringNameRecord : null!;
33+
var mockServices = MockServiceCollection.CreateMock(
34+
sd =>
35+
{
36+
Assert.Equal(typeof(RecordType), sd.ServiceType);
37+
Assert.Equal(ServiceLifetime.Singleton, sd.Lifetime);
38+
Assert.NotNull(sd.ImplementationFactory);
39+
40+
var actualService = sd.ImplementationFactory!.Invoke(Mock.Of<IServiceProvider>());
41+
Assert.Equal(regService, actualService);
42+
});
43+
44+
var sourceServices = mockServices.Object;
45+
var registrar = DependencyRegistrar<RecordType>.Create(sourceServices, _ => regService);
46+
47+
_ = registrar.RegisterSingleton();
48+
mockServices.Verify(s => s.Add(It.IsAny<ServiceDescriptor>()), Times.Once);
49+
}
50+
}
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
using System;
2+
using Microsoft.Extensions.DependencyInjection;
3+
using Moq;
4+
using PrimeFuncPack.UnitTest;
5+
using Xunit;
6+
using static PrimeFuncPack.UnitTest.TestData;
7+
8+
namespace PrimeFuncPack.DependencyRegistry.Tests;
9+
10+
partial class DependencyRegistrarTypedTest
11+
{
12+
[Theory]
13+
[InlineData(true)]
14+
[InlineData(false)]
15+
public void RegisterTransient_ExpectSourceServices(bool isNotNull)
16+
{
17+
var mockServices = MockServiceCollection.CreateMock();
18+
var sourceServices = mockServices.Object;
19+
20+
RecordType regService = isNotNull ? PlusFifteenIdSomeStringNameRecord : null!;
21+
var registrar = DependencyRegistrar<RecordType>.Create(sourceServices, _ => regService);
22+
23+
var actualServices = registrar.RegisterTransient();
24+
Assert.Same(sourceServices, actualServices);
25+
}
26+
27+
[Theory]
28+
[InlineData(true)]
29+
[InlineData(false)]
30+
public void RegisterTransient_ExpectCallAddTransientOnce(bool isNotNull)
31+
{
32+
RefType regService = isNotNull ? MinusFifteenIdRefType : null!;
33+
var mockServices = MockServiceCollection.CreateMock(
34+
sd =>
35+
{
36+
Assert.Equal(typeof(RefType), sd.ServiceType);
37+
Assert.Equal(ServiceLifetime.Transient, sd.Lifetime);
38+
Assert.NotNull(sd.ImplementationFactory);
39+
40+
var actualService = sd.ImplementationFactory!.Invoke(Mock.Of<IServiceProvider>());
41+
Assert.Equal(regService, actualService);
42+
});
43+
44+
var sourceServices = mockServices.Object;
45+
var registrar = DependencyRegistrar<RefType>.Create(sourceServices, _ => regService);
46+
47+
_ = registrar.RegisterTransient();
48+
mockServices.Verify(s => s.Add(It.IsAny<ServiceDescriptor>()), Times.Once);
49+
}
50+
}

src/dependency-registry/DependencyRegistry/DependencyRegistrar.T/DependencyRegistrar.T.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,5 +17,11 @@ internal DependencyRegistrar(IServiceCollection services, Func<IServiceProvider,
1717
this.services = services;
1818
this.resolver = resolver;
1919
}
20+
21+
public static DependencyRegistrar<T> Create(IServiceCollection services, Func<IServiceProvider, T> resolver)
22+
=>
23+
new(
24+
services ?? throw new ArgumentNullException(nameof(services)),
25+
resolver ?? throw new ArgumentNullException(nameof(resolver)));
2026
}
2127
}

src/dependency-registry/DependencyRegistry/DependencyRegistry.csproj

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,19 +7,25 @@
77
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
88
<PackageRequireLicenseAcceptance>true</PackageRequireLicenseAcceptance>
99
<PackageLicenseFile>LICENSE</PackageLicenseFile>
10+
<PackageReadmeFile>README.md</PackageReadmeFile>
11+
<PackageProjectUrl>https://github.com/pfpack/pfpack-dependency-registry</PackageProjectUrl>
1012
<Authors>Andrei Sergeev, Pavel Moskovoy</Authors>
1113
<Copyright>Copyright © 2020-2021 Andrei Sergeev, Pavel Moskovoy</Copyright>
12-
<Description>PrimeFuncPack Dependency Registry is a library for .NET providing the dependency registrar targeted to both usual services and dependency trees build by PrimeFuncPack Dependency to register the dependencies in the .NET dependency injection mechanism.</Description>
14+
<Description>PrimeFuncPack Dependency Registry is a library for .NET providing the dependency registrar targeted to both usual services and dependency trees built by PrimeFuncPack Dependency to register the dependencies in the .NET dependency injection mechanism.</Description>
1315
<RootNamespace>PrimeFuncPack</RootNamespace>
1416
<AssemblyName>PrimeFuncPack.DependencyRegistry</AssemblyName>
15-
<Version>1.2.1</Version>
17+
<Version>1.3.0-preview.1.0.0</Version>
1618
</PropertyGroup>
1719

1820
<ItemGroup>
1921
<None Include="..\..\..\LICENSE">
2022
<Pack>True</Pack>
2123
<PackagePath></PackagePath>
2224
</None>
25+
<None Include="..\..\..\docs\dependency-registry\README.md">
26+
<Pack>True</Pack>
27+
<PackagePath></PackagePath>
28+
</None>
2329
</ItemGroup>
2430

2531
<ItemGroup>

0 commit comments

Comments
 (0)