Skip to content
This repository was archived by the owner on Apr 18, 2020. It is now read-only.

Commit f983efd

Browse files
authored
Merge pull request #30 from osoykan/dev
dev to master
2 parents a378b75 + a19c9d1 commit f983efd

File tree

8 files changed

+64
-29
lines changed

8 files changed

+64
-29
lines changed

common.props

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<Project>
22
<PropertyGroup>
3-
<VersionPrefix>3.1.0</VersionPrefix>
3+
<VersionPrefix>3.1.1</VersionPrefix>
44
<GeneratePackageOnBuild>True</GeneratePackageOnBuild>
55
<NoWarn>$(NoWarn);CS1591</NoWarn>
66
<PackageIconUrl>https://raw.githubusercontent.com/osoykan/Stove/master/stove.png</PackageIconUrl>

src/Autofac.Extras.IocManager.DynamicProxy/Autofac.Extras.IocManager.DynamicProxy.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@
3333
<ItemGroup>
3434
<PackageReference Include="Autofac" Version="4.6.0" />
3535
<PackageReference Include="Autofac.Extras.DynamicProxy" Version="4.2.1" />
36-
<PackageReference Include="Castle.Core" Version="4.1.0" />
36+
<PackageReference Include="Castle.Core" Version="4.1.1" />
3737
</ItemGroup>
3838

3939
<ItemGroup Condition=" '$(TargetFramework)' == 'net452' ">
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
using System;
2+
3+
namespace Autofac.Extras.IocManager
4+
{
5+
public class BeforeRegistrationCompletedEventArgs : EventArgs
6+
{
7+
public BeforeRegistrationCompletedEventArgs(ContainerBuilder containerBuilder)
8+
{
9+
this.ContainerBuilder = containerBuilder;
10+
}
11+
12+
public ContainerBuilder ContainerBuilder { get; }
13+
}
14+
}

src/Autofac.Extras.IocManager/IServiceRegistration.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,11 @@ public interface IServiceRegistration
2626
/// </summary>
2727
event EventHandler<OnRegisteringEventArgs> OnRegistering;
2828

29+
/// <summary>
30+
/// Occurs when [before registration completed].
31+
/// </summary>
32+
event EventHandler<BeforeRegistrationCompletedEventArgs> BeforeRegistrationCompleted;
33+
2934
/// <summary>
3035
/// Registers the specified lifetime.
3136
/// </summary>

src/Autofac.Extras.IocManager/ServiceRegistration.cs

Lines changed: 23 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
using System;
22
using System.Collections.Generic;
3-
using System.ComponentModel;
43
using System.Linq;
54
using System.Reflection;
65

@@ -66,6 +65,11 @@ public ServiceRegistration(ContainerBuilder containerBuilder)
6665
/// </summary>
6766
public event EventHandler<OnRegisteringEventArgs> OnRegistering;
6867

68+
/// <summary>
69+
/// Occurs when [before registration completed].
70+
/// </summary>
71+
public event EventHandler<BeforeRegistrationCompletedEventArgs> BeforeRegistrationCompleted;
72+
6973
/// <summary>
7074
/// Registers the specified lifetime.
7175
/// </summary>
@@ -354,14 +358,14 @@ public void RegisterIfAbsent(Type serviceType, Type implementationType, Lifetime
354358
.IfNotRegistered(serviceType);
355359

356360
_containerBuilder.Register(c => c.Resolve(implementationType))
357-
.As(serviceType)
358-
.WithPropertyInjection()
359-
.OnActivating(args =>
360-
{
361-
object instance = _decoratorService.Decorate(args.Instance, new ResolverContext(new Resolver(args.Context)));
362-
args.ReplaceInstance(instance);
363-
})
364-
.IfNotRegistered(serviceType);
361+
.As(serviceType)
362+
.WithPropertyInjection()
363+
.OnActivating(args =>
364+
{
365+
object instance = _decoratorService.Decorate(args.Instance, new ResolverContext(new Resolver(args.Context)));
366+
args.ReplaceInstance(instance);
367+
})
368+
.IfNotRegistered(serviceType);
365369

366370
registration.ApplyLifeStyle(lifetime);
367371
}
@@ -596,6 +600,8 @@ public void RegisterAssemblyAsClosedTypesOf(
596600
/// <returns></returns>
597601
public IRootResolver CreateResolver(bool ignoreStartableComponents = false)
598602
{
603+
BeforeRegistrationCompleted?.Invoke(this, new BeforeRegistrationCompletedEventArgs(_containerBuilder));
604+
599605
IContainer container = _containerBuilder.Build(ignoreStartableComponents ? ContainerBuildOptions.IgnoreStartableComponents : ContainerBuildOptions.None);
600606
_rootResolver = new RootResolver(container);
601607

@@ -654,21 +660,21 @@ internal void RegisterApplyingLifetime<TLifetime>(ContainerBuilder builder, Type
654660
AddStartableIfPossible(typeToRegister, defaultGenerics);
655661
OnRegistering?.Invoke(this, new OnRegisteringEventArgs(_containerBuilder, typeToRegister, defaultGenerics.ToArray(), FindLifetime(typeof(TLifetime))));
656662
builder.RegisterGeneric(typeToRegister)
657-
.As(defaultGenerics.ToArray())
658-
.AsSelf()
659-
.WithPropertyInjection()
660-
.ApplyLifeStyle(typeof(TLifetime));
663+
.As(defaultGenerics.ToArray())
664+
.AsSelf()
665+
.WithPropertyInjection()
666+
.ApplyLifeStyle(typeof(TLifetime));
661667
}
662668
else
663669
{
664670
List<Type> defaults = defaultInterfaces.Where(t => !t.GetTypeInfo().IsGenericType).ToList();
665671
AddStartableIfPossible(typeToRegister, defaults);
666672
OnRegistering?.Invoke(this, new OnRegisteringEventArgs(_containerBuilder, typeToRegister, defaults.ToArray(), FindLifetime(typeof(TLifetime))));
667673
builder.RegisterType(typeToRegister)
668-
.As(defaults.ToArray())
669-
.AsSelf()
670-
.WithPropertyInjection()
671-
.ApplyLifeStyle(typeof(TLifetime));
674+
.As(defaults.ToArray())
675+
.AsSelf()
676+
.WithPropertyInjection()
677+
.ApplyLifeStyle(typeof(TLifetime));
672678
}
673679
}
674680

test/Autofac.Extras.IocManager.TestBase/Autofac.Extras.IocManager.TestBase.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
<ProjectReference Include="..\..\src\Autofac.Extras.IocManager\Autofac.Extras.IocManager.csproj" />
1515
<PackageReference Include="Autofac" Version="4.6.0" />
1616
<PackageReference Include="Autofac.Extras.DynamicProxy" Version="4.2.1" />
17-
<PackageReference Include="FakeItEasy" Version="3.4.1" />
17+
<PackageReference Include="FakeItEasy" Version="3.4.2" />
1818
<PackageReference Include="NSubstitute" Version="2.0.3" />
1919
<PackageReference Include="Shouldly" Version="2.8.3" />
2020
<PackageReference Include="xunit" Version="2.2.0" />

test/Autofac.Extras.IocManager.Tests/Autofac.Extras.IocManager.Tests.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
</PropertyGroup>
1212

1313
<ItemGroup>
14-
<PackageReference Include="FakeItEasy" Version="3.4.1" />
14+
<PackageReference Include="FakeItEasy" Version="3.4.2" />
1515
</ItemGroup>
1616

1717
<ItemGroup>

test/Autofac.Extras.IocManager.Tests/LastChanceOfRegistrationEvent_Tests.cs

Lines changed: 18 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,4 @@
1-
using System;
2-
using System.Collections.Generic;
3-
using System.Reflection;
1+
using System.Reflection;
42

53
using Autofac.Extras.IocManager.TestBase;
64

@@ -15,20 +13,32 @@ public class LastChanceOfRegistrationEvent_Tests : TestBaseWithIocBuilder
1513
[Fact]
1614
public void test()
1715
{
18-
var dbContexts = new List<Type>();
19-
2016
Building(builder =>
2117
{
2218
builder.RegisterServices(r =>
2319
{
2420
r.OnConventionalRegistering += (sender, args) => { };
2521

26-
r.OnRegistering += (sender, args) =>
22+
r.OnRegistering += (sender, args) => { args.ContainerBuilder.RegisterType<CStoveDbContext>().As<IStoveDbContext>().AsSelf(); };
23+
24+
r.RegisterAssemblyByConvention(typeof(LastChanceOfRegistrationEvent_Tests).GetTypeInfo().Assembly);
25+
});
26+
});
27+
28+
LocalIocManager.Resolve<CStoveDbContext>().ShouldNotBeNull();
29+
}
30+
31+
[Fact]
32+
public void before_registration_completed_should_register_last_chance()
33+
{
34+
Building(builder =>
35+
{
36+
builder.RegisterServices(r =>
37+
{
38+
r.BeforeRegistrationCompleted += (sender, args) =>
2739
{
2840
args.ContainerBuilder.RegisterType<CStoveDbContext>().As<IStoveDbContext>().AsSelf();
2941
};
30-
31-
r.RegisterAssemblyByConvention(typeof(LastChanceOfRegistrationEvent_Tests).GetTypeInfo().Assembly);
3242
});
3343
});
3444

0 commit comments

Comments
 (0)