From 5ce413c249558258208786f6c2fabc18b6c2b65f Mon Sep 17 00:00:00 2001 From: Matteo Bruni Date: Thu, 28 Apr 2016 14:01:34 +0200 Subject: [PATCH 1/2] fix gettypes exception --- UnitOfWork.NET/Classes/UnitOfWork.cs | 25 +++++++++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) diff --git a/UnitOfWork.NET/Classes/UnitOfWork.cs b/UnitOfWork.NET/Classes/UnitOfWork.cs index f55732e..368e99f 100644 --- a/UnitOfWork.NET/Classes/UnitOfWork.cs +++ b/UnitOfWork.NET/Classes/UnitOfWork.cs @@ -60,10 +60,31 @@ private void RegisterAssembly(Assembly[] assemblyArr) { var cb = new ContainerBuilder(); - cb.RegisterAssemblyTypes(assemblyArr.Where(t => t.GetTypes().Any(IsRepository)).ToArray()).Where(IsRepository).AsSelf().AsImplementedInterfaces(); + cb.RegisterAssemblyTypes(assemblyArr.Where(t => + { + try + { + return t.GetTypes().Any(IsRepository); + } + catch + { + return false; + } + }).ToArray()).Where(IsRepository).AsSelf().AsImplementedInterfaces(); cb.Update(_container); - foreach (var assembly in assemblyArr.SelectMany(t => t.GetReferencedAssemblies()).Select(Assembly.Load).Where(t => !_assemblies.Contains(t) && t.GetTypes().Any(IsRepository))) + foreach (var assembly in assemblyArr.SelectMany(t => t.GetReferencedAssemblies()).Select(Assembly.Load).Where( + t => + { + try + { + return !_assemblies.Contains(t) && t.GetTypes().Any(IsRepository); + } + catch + { + return false; + } + })) _assemblies.Add(assembly); } From 47e062968f4c3cb938426d3844fc196f960174c0 Mon Sep 17 00:00:00 2001 From: Matteo Bruni Date: Thu, 28 Apr 2016 14:02:51 +0200 Subject: [PATCH 2/2] fix --- UnitOfWork.NET/Classes/UnitOfWork.cs | 142 +++++++++++++-------------- 1 file changed, 71 insertions(+), 71 deletions(-) diff --git a/UnitOfWork.NET/Classes/UnitOfWork.cs b/UnitOfWork.NET/Classes/UnitOfWork.cs index c0755e0..d6ea4fc 100644 --- a/UnitOfWork.NET/Classes/UnitOfWork.cs +++ b/UnitOfWork.NET/Classes/UnitOfWork.cs @@ -8,57 +8,57 @@ namespace UnitOfWork.NET.Classes { - public class UnitOfWork : IUnitOfWork - { - private readonly ObservableCollection _assemblies; - private readonly IContainer _container; + public class UnitOfWork : IUnitOfWork + { + private readonly ObservableCollection _assemblies; + private readonly IContainer _container; - public UnitOfWork() - { - _assemblies = new ObservableCollection(); + public UnitOfWork() + { + _assemblies = new ObservableCollection(); - var cb = new ContainerBuilder(); + var cb = new ContainerBuilder(); - cb.Register(t => this).AsImplementedInterfaces().AsSelf().As(); - cb.RegisterType().AsSelf().As().PreserveExistingDefaults(); - cb.RegisterGeneric(typeof(Repository<>)).AsSelf().As(typeof(IRepository<>)); - cb.RegisterGeneric(typeof(Repository<,>)).AsSelf().As(typeof(IRepository<,>)); - cb.RegisterGeneric(typeof(Repository<,,>)).AsSelf().As(typeof(IListRepository<,,>)); + cb.Register(t => this).AsImplementedInterfaces().AsSelf().As(); + cb.RegisterType().AsSelf().As().PreserveExistingDefaults(); + cb.RegisterGeneric(typeof(Repository<>)).AsSelf().As(typeof(IRepository<>)); + cb.RegisterGeneric(typeof(Repository<,>)).AsSelf().As(typeof(IRepository<,>)); + cb.RegisterGeneric(typeof(Repository<,,>)).AsSelf().As(typeof(IListRepository<,,>)); - _container = cb.Build(); + _container = cb.Build(); - cb = new ContainerBuilder(); + cb = new ContainerBuilder(); - var fields = GetType().GetFields().ToArray(); - var properties = GetType().GetProperties().ToArray(); + var fields = GetType().GetFields().ToArray(); + var properties = GetType().GetProperties().ToArray(); - foreach (var type in fields.Select(t => t.FieldType).Union(properties.Select(t => t.PropertyType)).Where(IsRepository)) cb.RegisterType(type).AsSelf().AsImplementedInterfaces(); + foreach (var type in fields.Select(t => t.FieldType).Union(properties.Select(t => t.PropertyType)).Where(IsRepository)) cb.RegisterType(type).AsSelf().AsImplementedInterfaces(); - cb.Update(_container); + cb.Update(_container); - foreach (var field in fields.Where(t => t.FieldType.IsAssignableTo())) field.SetValue(this, _container.ResolveOptional(field.FieldType)); - foreach (var property in properties.Where(t => t.PropertyType.IsAssignableTo())) property.SetValue(this, _container.ResolveOptional(property.PropertyType)); + foreach (var field in fields.Where(t => t.FieldType.IsAssignableTo())) field.SetValue(this, _container.ResolveOptional(field.FieldType)); + foreach (var property in properties.Where(t => t.PropertyType.IsAssignableTo())) property.SetValue(this, _container.ResolveOptional(property.PropertyType)); - _assemblies.CollectionChanged += (sender, args) => RegisterAssembly(args.NewItems.Cast().ToArray()); + _assemblies.CollectionChanged += (sender, args) => RegisterAssembly(args.NewItems.Cast().ToArray()); - foreach (var assembly in AppDomain.CurrentDomain.GetAssemblies()) _assemblies.Add(assembly); - } + foreach (var assembly in AppDomain.CurrentDomain.GetAssemblies()) _assemblies.Add(assembly); + } - private bool IsRepository(Type t) - { - try - { - return t.IsAssignableTo() && !t.IsInterface && !t.IsAbstract && t != typeof(Repository) && ((t.IsGenericType && t.GetGenericTypeDefinition() != typeof(Repository<>) && t.GetGenericTypeDefinition() != typeof(Repository<,>) && t.GetGenericTypeDefinition() != typeof(Repository<,,>)) || !t.IsGenericType) && !_container.IsRegistered(t); - } - catch - { - return false; - } - } + private bool IsRepository(Type t) + { + try + { + return t.IsAssignableTo() && !t.IsInterface && !t.IsAbstract && t != typeof(Repository) && ((t.IsGenericType && t.GetGenericTypeDefinition() != typeof(Repository<>) && t.GetGenericTypeDefinition() != typeof(Repository<,>) && t.GetGenericTypeDefinition() != typeof(Repository<,,>)) || !t.IsGenericType) && !_container.IsRegistered(t); + } + catch + { + return false; + } + } - private void RegisterAssembly(Assembly[] assemblyArr) - { - var cb = new ContainerBuilder(); + private void RegisterAssembly(Assembly[] assemblyArr) + { + var cb = new ContainerBuilder(); cb.RegisterAssemblyTypes(assemblyArr.Where(t => { @@ -88,51 +88,51 @@ private void RegisterAssembly(Assembly[] assemblyArr) _assemblies.Add(assembly); } - public void RegisterRepository() where TRepository : IRepository => RegisterRepository(typeof(TRepository)); + public void RegisterRepository() where TRepository : IRepository => RegisterRepository(typeof(TRepository)); - public void RegisterRepositories(Type[] repositoryTypes) - { - var cb = new ContainerBuilder(); + public void RegisterRepositories(Type[] repositoryTypes) + { + var cb = new ContainerBuilder(); - foreach (var repositoryType in repositoryTypes) - { - if (repositoryType.IsInterface || repositoryType.IsAbstract || _container.IsRegistered(repositoryType)) continue; + foreach (var repositoryType in repositoryTypes) + { + if (repositoryType.IsInterface || repositoryType.IsAbstract || _container.IsRegistered(repositoryType)) continue; - if (repositoryType.IsGenericTypeDefinition) - cb.RegisterGeneric(repositoryType).AsSelf().AsImplementedInterfaces(); - else - cb.RegisterType(repositoryType).AsSelf().AsImplementedInterfaces(); - } + if (repositoryType.IsGenericTypeDefinition) + cb.RegisterGeneric(repositoryType).AsSelf().AsImplementedInterfaces(); + else + cb.RegisterType(repositoryType).AsSelf().AsImplementedInterfaces(); + } - cb.Update(_container); - } + cb.Update(_container); + } - public void RegisterRepository(Type repositoryType) - { - RegisterRepositories(new[] { repositoryType }); - } + public void RegisterRepository(Type repositoryType) + { + RegisterRepositories(new[] { repositoryType }); + } - private TRepository GetRepository() where TRepository : IRepository - { - RegisterRepository(); + private TRepository GetRepository() where TRepository : IRepository + { + RegisterRepository(); - return _container.Resolve(); - } + return _container.Resolve(); + } - public TRepository CustomRepository() where TRepository : IRepository => GetRepository(); + public TRepository CustomRepository() where TRepository : IRepository => GetRepository(); - public IRepository Repository() where T : class => GetRepository>(); + public IRepository Repository() where T : class => GetRepository>(); - public IRepository Repository() where TSource : class where TDestination : class => GetRepository>(); + public IRepository Repository() where TSource : class where TDestination : class => GetRepository>(); - public IListRepository Repository() where TSource : class where TDestination : class where TListDestination : class => GetRepository>(); + public IListRepository Repository() where TSource : class where TDestination : class where TListDestination : class => GetRepository>(); - public virtual IEnumerable Data() where T : class => Enumerable.Empty(); + public virtual IEnumerable Data() where T : class => Enumerable.Empty(); - public virtual void Dispose() - { - _container.Dispose(); - } - } + public virtual void Dispose() + { + _container.Dispose(); + } + } }