Skip to content

Commit b748889

Browse files
committed
Use System.IServiceProvider as Repository DependencyResolver
1 parent 41a72bd commit b748889

21 files changed

Lines changed: 59 additions & 234 deletions

File tree

SharpRepository.EfCoreRepository/EfCoreConfigRepositoryFactory.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -74,16 +74,16 @@ protected DbContext GetDbContext()
7474

7575
// TODO: look at dbContextType (from Enyim.Caching configuration bits) and how it caches, see about implementing cache or expanding FastActivator to take parameters
7676
DbContext dbContext = dbContextType == null
77-
? RepositoryDependencyResolver.Current?.Resolve<DbContext>()
78-
: (DbContext)RepositoryDependencyResolver.Current?.Resolve(dbContextType);
77+
? RepositoryDependencyResolver.Current?.GetService<DbContext>()
78+
: (DbContext)RepositoryDependencyResolver.Current?.GetService(dbContextType);
7979

8080
// if the Ioc container doesn't throw an error but still returns null we need to alert the consumer
8181
if (dbContext != null)
8282
{
8383
return dbContext;
8484
}
8585

86-
var options = RepositoryDependencyResolver.Current.Resolve<DbContextOptions>();
86+
var options = RepositoryDependencyResolver.Current.GetService<DbContextOptions>();
8787
if (options == null)
8888
{
8989
throw new RepositoryDependencyResolverException(typeof(DbContext));

SharpRepository.EfRepository/EfConfigRepositoryFactory.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -71,8 +71,8 @@ private DbContext GetDbContext()
7171
{
7272
// if there is an IOC dependency resolver configured then use that one to get the DbContext, this will allow sharing of context across multiple repositories if the IOC is configured that way
7373
return dbContextType == null
74-
? RepositoryDependencyResolver.Current.Resolve<DbContext>()
75-
: (DbContext)RepositoryDependencyResolver.Current.Resolve(dbContextType);
74+
? RepositoryDependencyResolver.Current.GetService<DbContext>()
75+
: (DbContext)RepositoryDependencyResolver.Current.GetService(dbContextType);
7676
}
7777
}
7878
}

SharpRepository.Ioc.Autofac/AutofacExtensions.cs

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,11 @@
44
using Autofac.Core;
55
using SharpRepository.Repository;
66
using SharpRepository.Repository.Configuration;
7+
using SharpRepository.Repository.Ioc;
8+
9+
#if NETSTANDARD2_0
10+
using Autofac.Extensions.DependencyInjection;
11+
#endif
712

813
namespace SharpRepository.Ioc.Autofac
914
{
@@ -16,9 +21,17 @@ public static class AutofacExtensions
1621
/// <param name="configuration"></param>
1722
/// <param name="repositoryName"></param>
1823
/// <param name="lifetimeScopeTag">Accepts any MatchingScopeLifetimeTags scope enum tag</param>
19-
public static void RegisterSharpRepository(this ContainerBuilder container, ISharpRepositoryConfiguration configuration, string repositoryName = null, params object[] lifetimeScopeTag)
24+
public static void RegisterSharpRepository(this ContainerBuilder containerBuilder, ISharpRepositoryConfiguration configuration, string repositoryName = null, params object[] lifetimeScopeTag)
2025
{
21-
container.RegisterSource(new RepositoryRegistrationSource(configuration, repositoryName, lifetimeScopeTag));
26+
containerBuilder.RegisterSource(new RepositoryRegistrationSource(configuration, repositoryName, lifetimeScopeTag));
27+
28+
//var containerCopyBuilder = new ContainerBuilder();
29+
30+
//#if NETSTANDARD2_0
31+
// RepositoryDependencyResolver.SetDependencyResolver(new AutofacServiceProvider(containerBuilder.Build()));
32+
//#else
33+
// RepositoryDependencyResolver.SetDependencyResolver(new AutofacRepositoryDependencyResolver(containerBuilder.Build()));
34+
//#endif
2235
}
2336
}
2437
}

SharpRepository.Ioc.Autofac/AutofacRepositoryDependencyResolver.cs

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,22 +4,17 @@
44

55
namespace SharpRepository.Ioc.Autofac
66
{
7-
public class AutofacRepositoryDependencyResolver : BaseRepositoryDependencyResolver
7+
public class AutofacRepositoryDependencyResolver : IServiceProvider
88
{
99
private readonly IContainer _container;
1010
public AutofacRepositoryDependencyResolver(IContainer container)
1111
{
1212
_container = container;
1313
}
1414

15-
protected override T ResolveInstance<T>()
15+
public object GetService(Type serviceType)
1616
{
17-
return _container.Resolve<T>();
18-
}
19-
20-
protected override object ResolveInstance(Type type)
21-
{
22-
return _container.Resolve(type);
17+
return _container.Resolve(serviceType);
2318
}
2419
}
2520
}

SharpRepository.Ioc.Autofac/RepositoryRegistrationSource.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ public IEnumerable<IComponentRegistration> RegistrationsFor(Service service, Fun
3535
typeof(ICompoundKeyRepository<,,>), typeof(ICompoundKeyRepository<,,,>), typeof(ICompoundKeyRepository<>)
3636
};
3737

38-
bool isRepositoryFunc(Type repo) => repo.GetTypeInfo().IsGenericType ? repositoryInterfaces.Contains(repo.GetGenericTypeDefinition()) : repo.GetInterfaces().Where(i => i.GetTypeInfo().IsGenericType).Select(i => i.GetGenericTypeDefinition()).Any(i => repositoryInterfaces.Contains(i));
38+
bool isRepositoryFunc(Type repo) => repo.GetTypeInfo().IsGenericType ? repositoryInterfaces.Contains(repo.GetGenericTypeDefinition()) : false;
3939
bool isCompoundRepositoryFunc(Type repo) => repo.GetTypeInfo().IsGenericType ? typeof(ICompoundKeyRepository<>) == repo.GetGenericTypeDefinition() : repo.GetInterfaces().Where(i => i.GetTypeInfo().IsGenericType).Select(i => i.GetGenericTypeDefinition()).Any(i => typeof(ICompoundKeyRepository<>) == i);
4040

4141
if (swt == null || !isRepositoryFunc(swt.ServiceType))

SharpRepository.Ioc.Autofac/SharpRepository.Ioc.Autofac.csproj

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<Project Sdk="Microsoft.NET.Sdk" ToolsVersion="15.0">
22
<PropertyGroup>
3-
<TargetFrameworks>netstandard1.3;net451</TargetFrameworks>
3+
<TargetFrameworks>netstandard2.0;netstandard1.3;net451</TargetFrameworks>
44
<Authors>Ben Griswold, Jeff Treuting</Authors>
55
<Description>Configures Autofac to resolve IRepository as the right configured implementation of SharpRepository</Description>
66
<Summary>Written in C#, includes support for various relational, document and object databases including Entity Framework, RavenDB, MongoDB, CouchDB and Db4o. SharpRepository includes Xml and InMemory repository implementations as well. SharpRepository offers built-in caching options for AppFabric, memcached and the standard System.Runtime.Caching. SharpRepository also supports Specifications, FetchStrategies, Batches and Traits!</Summary>
@@ -17,7 +17,10 @@
1717
<Version>2.0.4</Version>
1818
</PropertyGroup>
1919
<ItemGroup>
20-
<PackageReference Include="Autofac" Version="4.8.1" />
20+
<PackageReference Include="Autofac" Version="4.*" />
21+
</ItemGroup>
22+
<ItemGroup Condition="'$(TargetFramework)' == 'netstandard2.0'">
23+
<PackageReference Include="Autofac.Extensions.DependencyInjection" Version="5.*" />
2124
</ItemGroup>
2225
<ItemGroup>
2326
<ProjectReference Include="..\SharpRepository.Repository\SharpRepository.Repository.csproj" />

SharpRepository.Ioc.Microsoft.DependencyInjection/DependencyResolverWrapper.cs

Lines changed: 0 additions & 26 deletions
This file was deleted.

SharpRepository.Ioc.Microsoft.DependencyInjection/ServicesCollectionExtensions.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ public static IServiceProvider UseSharpRepository(this IServiceCollection servic
3939

4040
var resolver = container.GetInstance<IServiceProvider>();
4141

42-
RepositoryDependencyResolver.SetDependencyResolver(new DependencyResolverWrapper(resolver));
42+
RepositoryDependencyResolver.SetDependencyResolver(resolver);
4343

4444
// Finally, make sure we return an IServiceProvider. This makes
4545
// ASP.NET use the StructureMap container to resolve its services.

SharpRepository.Ioc.Mvc/MvcDependencyResolver.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -52,11 +52,11 @@ public static void ForRepositoriesUseSharpRepository(ISharpRepositoryConfigurati
5252

5353
c.ForRepositoriesUseSharpRepository(sharpConfig, repositoryName, lifecycle);
5454
});
55-
55+
5656
var dependencyResolver = new StructureMapDependencyResolver(container);
5757
DependencyResolver.SetResolver(dependencyResolver);
5858
GlobalConfiguration.Configuration.DependencyResolver = dependencyResolver;
59-
RepositoryDependencyResolver.SetDependencyResolver(new StructureMapRepositoryDependencyResolver(container));
59+
RepositoryDependencyResolver.SetDependencyResolver(dependencyResolver);
6060
}
6161
}
6262
}

SharpRepository.Ioc.Ninject/NinjectDependencyResolver.cs

Lines changed: 0 additions & 24 deletions
This file was deleted.

0 commit comments

Comments
 (0)