|
|
|
@ -1,6 +1,6 @@
|
|
|
|
|
// This software is part of the Autofac IoC container
|
|
|
|
|
// Copyright © 2015 Autofac Contributors
|
|
|
|
|
// http://autofac.org
|
|
|
|
|
// https://autofac.org
|
|
|
|
|
//
|
|
|
|
|
// Permission is hereby granted, free of charge, to any person
|
|
|
|
|
// obtaining a copy of this software and associated documentation
|
|
|
|
@ -33,19 +33,21 @@ namespace Autofac.Extensions.DependencyInjection
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <seealso cref="System.IServiceProvider" />
|
|
|
|
|
/// <seealso cref="Microsoft.Extensions.DependencyInjection.ISupportRequiredService" />
|
|
|
|
|
public class AutofacServiceProvider : IServiceProvider, ISupportRequiredService
|
|
|
|
|
public class AutofacServiceProvider : IServiceProvider, ISupportRequiredService, IDisposable
|
|
|
|
|
{
|
|
|
|
|
private readonly IComponentContext _componentContext;
|
|
|
|
|
private readonly ILifetimeScope _lifetimeScope;
|
|
|
|
|
|
|
|
|
|
private bool _disposed = false;
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Initializes a new instance of the <see cref="AutofacServiceProvider"/> class.
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="componentContext">
|
|
|
|
|
/// The component context from which services should be resolved.
|
|
|
|
|
/// <param name="lifetimeScope">
|
|
|
|
|
/// The lifetime scope from which services will be resolved.
|
|
|
|
|
/// </param>
|
|
|
|
|
public AutofacServiceProvider(IComponentContext componentContext)
|
|
|
|
|
public AutofacServiceProvider(ILifetimeScope lifetimeScope)
|
|
|
|
|
{
|
|
|
|
|
this._componentContext = componentContext;
|
|
|
|
|
this._lifetimeScope = lifetimeScope;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
@ -66,7 +68,7 @@ namespace Autofac.Extensions.DependencyInjection
|
|
|
|
|
/// </exception>
|
|
|
|
|
public object GetRequiredService(Type serviceType)
|
|
|
|
|
{
|
|
|
|
|
return this._componentContext.Resolve(serviceType);
|
|
|
|
|
return this._lifetimeScope.Resolve(serviceType);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
@ -81,7 +83,40 @@ namespace Autofac.Extensions.DependencyInjection
|
|
|
|
|
/// </returns>
|
|
|
|
|
public object GetService(Type serviceType)
|
|
|
|
|
{
|
|
|
|
|
return this._componentContext.ResolveOptional(serviceType);
|
|
|
|
|
return this._lifetimeScope.ResolveOptional(serviceType);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Gets the underlying instance of <see cref="ILifetimeScope" />.
|
|
|
|
|
/// </summary>
|
|
|
|
|
public ILifetimeScope LifetimeScope => _lifetimeScope;
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Releases unmanaged and - optionally - managed resources.
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="disposing">
|
|
|
|
|
/// <see langword="true" /> to release both managed and unmanaged resources;
|
|
|
|
|
/// <see langword="false" /> to release only unmanaged resources.
|
|
|
|
|
/// </param>
|
|
|
|
|
protected virtual void Dispose(bool disposing)
|
|
|
|
|
{
|
|
|
|
|
if (!this._disposed)
|
|
|
|
|
{
|
|
|
|
|
this._disposed = true;
|
|
|
|
|
if (disposing)
|
|
|
|
|
{
|
|
|
|
|
this._lifetimeScope.Dispose();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources.
|
|
|
|
|
/// </summary>
|
|
|
|
|
public void Dispose()
|
|
|
|
|
{
|
|
|
|
|
this.Dispose(true);
|
|
|
|
|
GC.SuppressFinalize(this);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|