Browse Source

Renamed tenant manager components.

pull/81/head
Halil İbrahim Kalkan 10 years ago
parent
commit
6ec1cdb848
  1. 21
      src/Volo.Abp.MultiTenancy/Volo/Abp/MultiTenancy/AmbientTenantAccessor.cs
  2. 18
      src/Volo.Abp.MultiTenancy/Volo/Abp/MultiTenancy/AmbientTenantScope.cs
  3. 32
      src/Volo.Abp.MultiTenancy/Volo/Abp/MultiTenancy/AsyncLocalAmbientTenantScopeProvider.cs
  4. 22
      src/Volo.Abp.MultiTenancy/Volo/Abp/MultiTenancy/IAmbientTenantAccessor.cs
  5. 11
      src/Volo.Abp.MultiTenancy/Volo/Abp/MultiTenancy/IAmbientTenantScopeProvider.cs
  6. 21
      src/Volo.Abp.MultiTenancy/Volo/Abp/MultiTenancy/MultiTenancyManager.cs
  7. 2
      src/Volo.Abp.MultiTenancy/Volo/Abp/MultiTenancy/TenantInfo.cs
  8. 8
      test/Volo.Abp.MultiTenancy.Tests/Volo/Abp/MultiTenancy/MultiTenantManager_TenantResolver_Tests.cs

21
src/Volo.Abp.MultiTenancy/Volo/Abp/MultiTenancy/AmbientTenantAccessor.cs

@ -1,21 +0,0 @@
using System.Threading;
using Volo.DependencyInjection;
namespace Volo.Abp.MultiTenancy
{
public class AmbientTenantAccessor : IAmbientTenantAccessor, ISingletonDependency //TODO: Should be IScopedDependency?
{
public AmbientTenantInfo AmbientTenant
{
get { return _tenant.Value; }
set { _tenant.Value = value; }
}
private readonly AsyncLocal<AmbientTenantInfo> _tenant;
public AmbientTenantAccessor()
{
_tenant = new AsyncLocal<AmbientTenantInfo>();
}
}
}

18
src/Volo.Abp.MultiTenancy/Volo/Abp/MultiTenancy/AmbientTenantScope.cs

@ -0,0 +1,18 @@
using JetBrains.Annotations;
namespace Volo.Abp.MultiTenancy
{
public class AmbientTenantScope
{
/// <summary>
/// Null indicates the host.
/// Not null value for a tenant.
/// </summary>
public TenantInfo Tenant { get; set; }
public AmbientTenantScope([CanBeNull] TenantInfo tenant)
{
Tenant = tenant;
}
}
}

32
src/Volo.Abp.MultiTenancy/Volo/Abp/MultiTenancy/AsyncLocalAmbientTenantScopeProvider.cs

@ -0,0 +1,32 @@
using System;
using System.Threading;
using Volo.DependencyInjection;
namespace Volo.Abp.MultiTenancy
{
public class AsyncLocalAmbientTenantScopeProvider : IAmbientTenantScopeProvider, IScopedDependency
{
public AmbientTenantScope CurrentScope
{
get { return _tenant.Value; }
set { _tenant.Value = value; }
}
private readonly AsyncLocal<AmbientTenantScope> _tenant;
public AsyncLocalAmbientTenantScopeProvider()
{
_tenant = new AsyncLocal<AmbientTenantScope>();
}
public IDisposable CreateScope(TenantInfo tenantInfo)
{
var parentScope = CurrentScope;
CurrentScope = new AmbientTenantScope(tenantInfo);
return new DisposeAction(() =>
{
CurrentScope = parentScope;
});
}
}
}

22
src/Volo.Abp.MultiTenancy/Volo/Abp/MultiTenancy/IAmbientTenantAccessor.cs

@ -1,22 +0,0 @@
using JetBrains.Annotations;
namespace Volo.Abp.MultiTenancy
{
public interface IAmbientTenantAccessor
{
AmbientTenantInfo AmbientTenant { get; set; }
}
public class AmbientTenantInfo
{
/// <summary>
/// Null for host.
/// </summary>
public TenantInfo Tenant { get; set; }
public AmbientTenantInfo([CanBeNull] TenantInfo tenant)
{
Tenant = tenant;
}
}
}

11
src/Volo.Abp.MultiTenancy/Volo/Abp/MultiTenancy/IAmbientTenantScopeProvider.cs

@ -0,0 +1,11 @@
using System;
namespace Volo.Abp.MultiTenancy
{
public interface IAmbientTenantScopeProvider
{
AmbientTenantScope CurrentScope { get; set; }
IDisposable CreateScope(TenantInfo tenantInfo);
}
}

21
src/Volo.Abp.MultiTenancy/Volo/Abp/MultiTenancy/MultiTenancyManager.cs

@ -8,20 +8,22 @@ namespace Volo.Abp.MultiTenancy
{ {
public TenantInfo CurrentTenant => GetCurrentTenant(); public TenantInfo CurrentTenant => GetCurrentTenant();
private readonly IAmbientTenantAccessor _ambientTenantAccessor; private readonly IAmbientTenantScopeProvider _ambientTenantScopeProvider;
private readonly IEnumerable<ITenantResolver> _currentTenantResolvers; private readonly IEnumerable<ITenantResolver> _currentTenantResolvers;
public MultiTenancyManager(IAmbientTenantAccessor ambientTenantAccessor, IEnumerable<ITenantResolver> currentTenantResolvers) public MultiTenancyManager(
IAmbientTenantScopeProvider ambientTenantScopeProvider,
IEnumerable<ITenantResolver> currentTenantResolvers)
{ {
_ambientTenantAccessor = ambientTenantAccessor; _ambientTenantScopeProvider = ambientTenantScopeProvider;
_currentTenantResolvers = currentTenantResolvers; _currentTenantResolvers = currentTenantResolvers;
} }
protected virtual TenantInfo GetCurrentTenant() protected virtual TenantInfo GetCurrentTenant()
{ {
if (_ambientTenantAccessor.AmbientTenant != null) if (_ambientTenantScopeProvider.CurrentScope != null)
{ {
return _ambientTenantAccessor.AmbientTenant.Tenant; return _ambientTenantScopeProvider.CurrentScope.Tenant;
} }
var context = new CurrentTenantResolveContext(); var context = new CurrentTenantResolveContext();
@ -40,14 +42,7 @@ namespace Volo.Abp.MultiTenancy
public IDisposable ChangeTenant(TenantInfo tenantInfo) public IDisposable ChangeTenant(TenantInfo tenantInfo)
{ {
var oldValue = _ambientTenantAccessor.AmbientTenant; return _ambientTenantScopeProvider.CreateScope(tenantInfo);
_ambientTenantAccessor.AmbientTenant = new AmbientTenantInfo(tenantInfo);
return new DisposeAction(() =>
{
_ambientTenantAccessor.AmbientTenant = oldValue;
});
} }
} }
} }

2
src/Volo.Abp.MultiTenancy/Volo/Abp/MultiTenancy/TenantInfo.cs

@ -8,6 +8,8 @@ namespace Volo.Abp.MultiTenancy
public string Name { get; } public string Name { get; }
//TODO: Needed for serialization
[UsedImplicitly]
private TenantInfo() private TenantInfo()
{ {

8
test/Volo.Abp.MultiTenancy.Tests/Volo/Abp/MultiTenancy/MultiTenantManager_TenantResolver_Tests.cs

@ -12,7 +12,7 @@ namespace Volo.Abp.MultiTenancy
{ {
//Arrange //Arrange
var manager = new MultiTenancyManager(Substitute.For<IAmbientTenantAccessor>(), new ITenantResolver[0]); var manager = new MultiTenancyManager(Substitute.For<IAmbientTenantScopeProvider>(), new ITenantResolver[0]);
//Assert //Assert
@ -26,7 +26,7 @@ namespace Volo.Abp.MultiTenancy
var fakeTenant = new TenantInfo(Guid.NewGuid().ToString(), "acme"); var fakeTenant = new TenantInfo(Guid.NewGuid().ToString(), "acme");
var manager = new MultiTenancyManager(Substitute.For<IAmbientTenantAccessor>(), new[] var manager = new MultiTenancyManager(Substitute.For<IAmbientTenantScopeProvider>(), new[]
{ {
new TenantResolverAction(context => new TenantResolverAction(context =>
{ {
@ -48,7 +48,7 @@ namespace Volo.Abp.MultiTenancy
var fakeTenant = new TenantInfo(Guid.NewGuid().ToString(), "acme"); var fakeTenant = new TenantInfo(Guid.NewGuid().ToString(), "acme");
var manager = new MultiTenancyManager(Substitute.For<IAmbientTenantAccessor>(), new[] var manager = new MultiTenancyManager(Substitute.For<IAmbientTenantScopeProvider>(), new[]
{ {
new TenantResolverAction(context => new TenantResolverAction(context =>
{ {
@ -78,7 +78,7 @@ namespace Volo.Abp.MultiTenancy
var oldTenant = new TenantInfo(Guid.NewGuid().ToString(), "old-tenant"); var oldTenant = new TenantInfo(Guid.NewGuid().ToString(), "old-tenant");
var manager = new MultiTenancyManager(Substitute.For<IAmbientTenantAccessor>(), new[] var manager = new MultiTenancyManager(new AsyncLocalAmbientTenantScopeProvider(), new[]
{ {
new TenantResolverAction(context => new TenantResolverAction(context =>
{ {

Loading…
Cancel
Save