Skip to content

Commit d973bb1

Browse files
author
Chris Santero
committed
provide hook for configuring lifetime scope before it is built
1 parent d10b334 commit d973bb1

2 files changed

Lines changed: 44 additions & 16 deletions

File tree

JSONAPI.AcceptanceTests.EntityFrameworkTestWebApp/Startup.cs

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -33,17 +33,6 @@ public Startup(Func<TestDbContext> dbContextFactory)
3333

3434
public void Configuration(IAppBuilder app)
3535
{
36-
var containerBuilder = new ContainerBuilder();
37-
containerBuilder.Register(c => _dbContextFactory())
38-
.AsSelf()
39-
.As<DbContext>()
40-
.InstancePerRequest();
41-
containerBuilder.RegisterModule<JsonApiAutofacEntityFrameworkModule>();
42-
containerBuilder.RegisterType<CustomEntityFrameworkResourceObjectMaterializer>()
43-
.As<IEntityFrameworkResourceObjectMaterializer>();
44-
containerBuilder.RegisterApiControllers(Assembly.GetExecutingAssembly());
45-
var container = containerBuilder.Build();
46-
4736
var configuration = new JsonApiConfiguration();
4837
configuration.RegisterEntityFrameworkResourceType<Building>();
4938
configuration.RegisterEntityFrameworkResourceType<City>();
@@ -70,7 +59,18 @@ public void Configuration(IAppBuilder app)
7059
}); // Example of a resource that is mapped from a DB entity
7160
configuration.RegisterResourceType<StarshipOfficerDto>();
7261

73-
var configurator = new JsonApiHttpAutofacConfigurator(container);
62+
var configurator = new JsonApiHttpAutofacConfigurator();
63+
configurator.OnApplicationLifetimeScopeCreating(builder =>
64+
{
65+
builder.Register(c => _dbContextFactory())
66+
.AsSelf()
67+
.As<DbContext>()
68+
.InstancePerRequest();
69+
builder.RegisterModule<JsonApiAutofacEntityFrameworkModule>();
70+
builder.RegisterType<CustomEntityFrameworkResourceObjectMaterializer>()
71+
.As<IEntityFrameworkResourceObjectMaterializer>();
72+
builder.RegisterApiControllers(Assembly.GetExecutingAssembly());
73+
});
7474
configurator.OnApplicationLifetimeScopeBegun(applicationLifetimeScope =>
7575
{
7676
// TODO: is this a candidate for spinning into a JSONAPI.Autofac.WebApi.Owin package? Yuck

JSONAPI.Autofac/JsonApiHttpAutofacConfigurator.cs

Lines changed: 32 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,25 +9,44 @@ namespace JSONAPI.Autofac
99
public class JsonApiHttpAutofacConfigurator
1010
{
1111
private readonly ILifetimeScope _lifetimeScope;
12+
private Action<ContainerBuilder> _appLifetimeScopeCreating;
1213
private Action<ILifetimeScope> _appLifetimeScopeBegunAction;
1314

15+
public JsonApiHttpAutofacConfigurator()
16+
{
17+
}
18+
1419
public JsonApiHttpAutofacConfigurator(ILifetimeScope lifetimeScope)
1520
{
1621
_lifetimeScope = lifetimeScope;
1722
}
1823

24+
public void OnApplicationLifetimeScopeCreating(Action<ContainerBuilder> appLifetimeScopeCreating)
25+
{
26+
_appLifetimeScopeCreating = appLifetimeScopeCreating;
27+
}
28+
1929
public void OnApplicationLifetimeScopeBegun(Action<ILifetimeScope> appLifetimeScopeBegunAction)
2030
{
2131
_appLifetimeScopeBegunAction = appLifetimeScopeBegunAction;
2232
}
2333

2434
public void Apply(HttpConfiguration httpConfiguration, IJsonApiConfiguration jsonApiConfiguration)
2535
{
26-
var applicationLifetimeScope = _lifetimeScope.BeginLifetimeScope(containerBuilder =>
36+
ILifetimeScope applicationLifetimeScope;
37+
if (_lifetimeScope == null)
2738
{
28-
var module = new JsonApiAutofacModule(jsonApiConfiguration);
29-
containerBuilder.RegisterModule(module);
30-
});
39+
var builder = new ContainerBuilder();
40+
ConfigureApplicationLifetimeScope(jsonApiConfiguration, builder);
41+
applicationLifetimeScope = builder.Build();
42+
}
43+
else
44+
{
45+
applicationLifetimeScope = _lifetimeScope.BeginLifetimeScope(containerBuilder =>
46+
{
47+
ConfigureApplicationLifetimeScope(jsonApiConfiguration, containerBuilder);
48+
});
49+
}
3150

3251
if (_appLifetimeScopeBegunAction != null)
3352
_appLifetimeScopeBegunAction(applicationLifetimeScope);
@@ -36,5 +55,14 @@ public void Apply(HttpConfiguration httpConfiguration, IJsonApiConfiguration jso
3655
jsonApiHttpConfiguration.Apply(httpConfiguration);
3756
httpConfiguration.DependencyResolver = new AutofacWebApiDependencyResolver(applicationLifetimeScope);
3857
}
58+
59+
private void ConfigureApplicationLifetimeScope(IJsonApiConfiguration jsonApiConfiguration, ContainerBuilder containerBuilder)
60+
{
61+
var module = new JsonApiAutofacModule(jsonApiConfiguration);
62+
containerBuilder.RegisterModule(module);
63+
64+
if (_appLifetimeScopeCreating != null)
65+
_appLifetimeScopeCreating(containerBuilder);
66+
}
3967
}
4068
}

0 commit comments

Comments
 (0)