Revised code base.

pull/81/head
Halil İbrahim Kalkan 9 years ago
parent e10e0881e1
commit 38dc378db3

@ -1,10 +1,9 @@
using Volo.Abp.MultiTenancy;
using Volo.DependencyInjection;
using Volo.ExtensionMethods.Collections.Generic;
namespace Volo.Abp.AspNetCore.MultiTenancy
{
public class QueryStringTenantResolver : ITenantResolver, ITransientDependency
public class QueryStringTenantResolver : ITenantResolver
{
public const string TenantIdKey = "__tenantId";

@ -1,5 +1,4 @@
using Microsoft.AspNetCore.Builder;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.DependencyInjection;
using Volo.Abp.Modularity;
namespace Volo.Abp.AspNetCore.Mvc
@ -9,7 +8,6 @@ namespace Volo.Abp.AspNetCore.Mvc
{
public void ConfigureServices(IServiceCollection services)
{
services.AddObjectAccessor<IApplicationBuilder>();
services.AddAssemblyOf<AbpAspNetCoreMvcModule>();
}
}

@ -10,10 +10,15 @@ namespace Volo.Abp.AspNetCore
{
public void ConfigureServices(IServiceCollection services)
{
services.TryAddSingleton<IHttpContextAccessor, HttpContextAccessor>();
AddAspNetServices(services);
services.AddObjectAccessor<IApplicationBuilder>();
services.AddAssemblyOf<AbpAspNetCoreModule>();
}
private static void AddAspNetServices(IServiceCollection services)
{
services.TryAddSingleton<IHttpContextAccessor, HttpContextAccessor>();
}
}
}

@ -0,0 +1,26 @@
using System;
using System.Linq;
namespace Microsoft.Extensions.DependencyInjection
{
public static class ServiceCollectionCommonExtensions
{
public static T GetSingletonInstanceOrNull<T>(this IServiceCollection services)
{
return (T)services
.FirstOrDefault(d => d.ServiceType == typeof(T))
?.ImplementationInstance;
}
public static T GetSingletonInstance<T>(this IServiceCollection services)
{
var service = services.GetSingletonInstanceOrNull<T>();
if (service == null)
{
throw new InvalidOperationException("Could not find singleton service: " + typeof(T).AssemblyQualifiedName);
}
return service;
}
}
}

@ -4,24 +4,16 @@ using Volo.DependencyInjection;
namespace Microsoft.Extensions.DependencyInjection
{
public static class CommonServiceCollectionExtensions
public static class ServiceCollectionObjectAccessorExtensions
{
public static T GetSingletonInstanceOrNull<T>(this IServiceCollection services)
public static ObjectAccessor<T> TryAddObjectAccessor<T>(this IServiceCollection services)
{
return (T)services
.FirstOrDefault(d => d.ServiceType == typeof(T))
?.ImplementationInstance;
}
public static T GetSingletonInstance<T>(this IServiceCollection services)
{
var service = services.GetSingletonInstanceOrNull<T>();
if (service == null)
if (services.Any(s => s.ServiceType == typeof(ObjectAccessor<T>)))
{
throw new InvalidOperationException("Could not find singleton service: " + typeof(T).AssemblyQualifiedName);
return services.GetSingletonInstance<ObjectAccessor<T>>();
}
return service;
return services.AddObjectAccessor<T>();
}
public static ObjectAccessor<T> AddObjectAccessor<T>(this IServiceCollection services)
@ -36,6 +28,11 @@ namespace Microsoft.Extensions.DependencyInjection
public static ObjectAccessor<T> AddObjectAccessor<T>(this IServiceCollection services, ObjectAccessor<T> accessor)
{
if (services.Any(s => s.ServiceType == typeof(ObjectAccessor<T>)))
{
throw new Exception("An object accessor is registered before for type: " + typeof(T).AssemblyQualifiedName);
}
services.AddSingleton(typeof(IObjectAccessor<T>), accessor);
services.AddSingleton(typeof(ObjectAccessor<T>), accessor);
Loading…
Cancel
Save