Beispiel #1
0
        private IEnumerable <string> LoadLinqBaseTypes()
        {
            var linqBaseRepositoryTypes = new List <string>();

            if (!string.IsNullOrWhiteSpace(ProjectPath))
            {
                var activeConfig = SolutionInfo.GetActiveConfiguration() ?? "debug";
                var assemblyName = this.GetAssemblyName();
                if (!string.IsNullOrWhiteSpace(assemblyName))
                {
                    var bin  = Path.Combine(Path.GetDirectoryName(ProjectPath), "bin", activeConfig);
                    var path = Path.Combine(bin, assemblyName + ".dll");

                    if (File.Exists(path))
                    {
                        _tempBin = new DirectoryInfo(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "Coddee", "CoddeeTools", "tempBin", Guid.NewGuid().ToString()));
                        if (!_tempBin.Exists)
                        {
                            _tempBin.Create();
                        }
                        foreach (var file in _tempBin.GetFiles())
                        {
                            file.Delete();
                        }
                        foreach (var file in Directory.GetFiles(bin))
                        {
                            File.Copy(file, Path.Combine(_tempBin.FullName, Path.GetFileName(file)));
                        }

                        var assembly = Assembly.ReflectionOnlyLoadFrom(Path.Combine(_tempBin.FullName, assemblyName + ".dll"));
                        AppDomain.CurrentDomain.ReflectionOnlyAssemblyResolve += ReflectionOnlyAssemblyResolve;
                        foreach (var type in assembly.GetTypes())
                        {
                            if (type.IsGenericType && type.BaseType.GetGenericTypeDefinition().FullName == typeof(CRUDLinqRepositoryBase <, , ,>).FullName ||
                                type.IsGenericType && type.BaseType.GetGenericTypeDefinition().FullName == typeof(ReadOnlyLinqRepositoryBase <, , ,>).FullName ||
                                type.IsGenericType && type.BaseType.GetGenericTypeDefinition().FullName == typeof(LinqRepositoryBase <, , ,>).FullName ||
                                type.IsGenericType && type.BaseType.GetGenericTypeDefinition().FullName == typeof(LinqRepositoryBase <,>).FullName ||
                                type.IsGenericType && type.BaseType.GetGenericTypeDefinition().FullName == typeof(LinqRepositoryBase <>).FullName)
                            {
                                linqBaseRepositoryTypes.Add(type.Name);
                            }
                        }
                        AppDomain.CurrentDomain.ReflectionOnlyAssemblyResolve -= ReflectionOnlyAssemblyResolve;
                    }
                }
            }
            return(linqBaseRepositoryTypes);
        }