Example #1
0
 public static IHostBuilder CreateHostBuilder(string[] args) =>
 Host.CreateDefaultBuilder(args)
 .UseAutoFacContainer(AssemblyPaths.From("Dependous"), logger: (o) => Console.WriteLine($"{o}"))
 .ConfigureWebHostDefaults(webBuilder =>
 {
     webBuilder.UseStartup <Startup>();
 });
Example #2
0
        public string ChangeWorkingDirectory()
        {
            var currentWorkingDirectory = Directory.GetCurrentDirectory();

            if (!string.IsNullOrEmpty(WorkingDirectory))
            {
                Directory.SetCurrentDirectory(WorkingDirectory);
            }
            else if (!string.IsNullOrEmpty(Project))
            {
                var workingDirectory = Path.GetDirectoryName(Project);
                if (Directory.Exists(workingDirectory))
                {
                    Directory.SetCurrentDirectory(workingDirectory);
                }
            }
            else if (AssemblyPaths.Any())
            {
                var workingDirectory = Path.GetDirectoryName(AssemblyPaths.First());
                if (Directory.Exists(workingDirectory))
                {
                    Directory.SetCurrentDirectory(workingDirectory);
                }
            }

            return(currentWorkingDirectory);
        }
Example #3
0
            public static AssemblyPaths ForWeavedAssembly(AssemblyPaths unweavedAssemblyPaths)
            {
                var dllPath = unweavedAssemblyPaths.DllPath.Replace(".DLL", ".Weaved.dll");
                var pdbPath = unweavedAssemblyPaths.PdbPath.Replace(".Pdb", ".Weaved.Pdb");

                return(new AssemblyPaths(dllPath, pdbPath));
            }
 internal static void Register(string assemblyPath)
 {
     if (!string.IsNullOrEmpty(assemblyPath))
     {
         AssemblyPaths.Add(assemblyPath);
     }
 }
 /// <summary>
 /// Adds Dependous and Autofac as the preferred IOC container.
 /// </summary>
 /// <param name="hostBuilder">The host builder.</param>
 /// <param name="assemblyNameFilter">The assembly name filter.</param>
 /// <param name="configurationBuilder">The configuration builder.</param>
 /// <param name="logger">The logger.</param>
 /// <param name="containerBuilder">The container builder.</param>
 /// <returns></returns>
 public static IHostBuilder UseAutoFacContainer(this IHostBuilder hostBuilder,
                                                AssemblyPaths assemblyPaths,
                                                Action <IDependousConfiguration> configurationBuilder = null,
                                                Action <object> logger = null,
                                                Action <ContainerBuilder> containerBuilder = null)
 {
     AutoFacSetup.SetAutoFacCircularDependencyLimit();
     return(hostBuilder.UseServiceProviderFactory(new AutoFacServiceProviderFactoryDecorator(assemblyPaths, configurationBuilder, logger, containerBuilder)));
 }
Example #6
0
        public TestDecoration(ITestOutputHelper outputHelper)
        {
            output = outputHelper;
            var serviceCollection = new ServiceCollection();

            serviceCollection.AddDependencyScanning();
            container = serviceCollection.BuildAutoFacContainer(AssemblyPaths.From("SportsConnect", "Dependous"),
                                                                logger: (item) => { output.WriteLine($"{item}"); Console.WriteLine(item); });
        }
        /// <summary>
        /// Adds Dependous and Autofac as the preferred IOC container.
        /// </summary>
        /// <param name="hostBuilder">The host builder.</param>
        /// <param name="assemblyNameFilter">The assembly name filter.</param>
        /// <param name="configurationBuilder">The configuration builder.</param>
        /// <param name="logger">The logger.</param>
        /// <param name="containerBuilder">The container builder.</param>
        /// <returns></returns>
        public static IContainer BuildAutoFacContainer(this IServiceCollection services,
                                                       AssemblyPaths assemblyPaths,
                                                       Action <IDependousConfiguration> configurationBuilder = null,
                                                       Action <object> logger = null,
                                                       Action <ContainerBuilder> containerBuilder = null)
        {
            var container = new AutoFacServiceProviderFactoryDecorator(assemblyPaths, configurationBuilder, logger, containerBuilder).CreateBuilder(services).Build();

            return(container);
        }
Example #8
0
        protected async Task <TResult> RunIsolatedAsync(string configurationFile)
        {
            var assemblyDirectory = AssemblyPaths.Any() ? Path.GetDirectoryName(Path.GetFullPath(PathUtilities.ExpandFileWildcards(AssemblyPaths).First())) : configurationFile;
            var bindingRedirects  = GetBindingRedirects();
            var assemblies        = GetAssemblies(assemblyDirectory);

            using (var isolated = new AppDomainIsolation <IsolatedCommandAssemblyLoader <TResult> >(assemblyDirectory, AssemblyConfig, bindingRedirects, assemblies))
            {
                return(await Task.Run(() => isolated.Object.Run(GetType().FullName, JsonConvert.SerializeObject(this), AssemblyPaths, ReferencePaths)).ConfigureAwait(false));
            }
        }
 internal AutoFacServiceProviderFactoryDecorator(
     AssemblyPaths assemblyPaths,
     Action <IDependousConfiguration> configurationBuilder = null,
     Action <object> logger = null,
     Action <ContainerBuilder> containerBuilder = null)
 {
     _assemblyPaths        = assemblyPaths;
     _configurationBuilder = configurationBuilder;
     _logger     = logger ?? ((x) => { });
     _decorateer = new AutofacServiceProviderFactory(containerBuilder);
 }
        private IEnumerable <string> ResolveAvailableDlls()
        {
            var coreDlls    = new[] { typeof(object).Assembly.Location };
            var runtimeDlls = Directory.GetFiles(RuntimeEnvironment.GetRuntimeDirectory(), "*.dll");
            var moduleDlls  = AssemblyPaths.SelectMany(p => Directory.GetFiles(p, "*.dll"));

            return(coreDlls
                   .Concat(runtimeDlls)
                   .Concat(moduleDlls)
                   .Distinct()
                   .ToList());
        }
Example #11
0
        private static void TryCleanupWeavedFiles(AssemblyPaths assemblyPaths)
        {
            if (File.Exists(assemblyPaths.DllPath))
            {
                File.Delete(assemblyPaths.DllPath);
            }

            if (File.Exists(assemblyPaths.PdbPath))
            {
                File.Delete(assemblyPaths.PdbPath);
            }
        }
Example #12
0
        protected UnifiedWeaverTestBase()
        {
            var source = AssemblyPaths.OfExecutingAssembly();
            var weave  = AssemblyPaths.ForWeavedAssembly(source);

            TryCleanupWeavedFiles(weave);

            File.Copy(source.DllPath, weave.DllPath, true);
            File.Copy(source.PdbPath, weave.PdbPath, true);

            Source = source;
            Weave  = weave;
        }
        private void SanitizeInput()
        {
            AssemblyPaths = AssemblyPaths.Select(p => p
                                                 .Replace('\\', Path.DirectorySeparatorChar)
                                                 .Replace('/', Path.DirectorySeparatorChar))
                            .Distinct()
                            .ToArray();

            AssemblyNames = AssemblyNames
                            .Where(n => !string.IsNullOrWhiteSpace(n))
                            .Distinct()
                            .ToArray();
        }
Example #14
0
        public ResolvedPackageReference(
            string packageName,
            string packageVersion,
            IReadOnlyList <FileInfo> assemblyPaths,
            DirectoryInfo packageRoot = null,
            IReadOnlyList <DirectoryInfo> probingPaths = null) : base(packageName, packageVersion)
        {
            if (string.IsNullOrWhiteSpace(packageVersion))
            {
                throw new ArgumentException("Value cannot be null or whitespace.", nameof(packageVersion));
            }

            AssemblyPaths = assemblyPaths ?? throw new ArgumentNullException(nameof(assemblyPaths));
            ProbingPaths  = probingPaths ?? Array.Empty <DirectoryInfo>();
            PackageRoot   = packageRoot ?? AssemblyPaths.FirstOrDefault()?.Directory.Parent.Parent;
        }
Example #15
0
        private DefaultAssemblyResolver CreateAssemblyResolver()
        {
            var assemblyResolver = new DefaultAssemblyResolver();

            foreach (Assembly assembly in AppDomain.CurrentDomain.GetAssemblies())
            {
                if (assembly.Location.Replace('\\', '/').StartsWith(Application.dataPath.Substring(0, Application.dataPath.Length - 7)))
                {
                    AssemblyPaths.Add(assembly.Location);
                }

                assemblyResolver.AddSearchDirectory(Path.GetDirectoryName(assembly.Location));
            }

            return(assemblyResolver);
        }
Example #16
0
        public AutofacContainerTests(ITestOutputHelper outputHelper)
        {
            output = outputHelper;
            var serviceCollection = new ServiceCollection();

            serviceCollection.AddSingleton <MyObject>();
            serviceCollection.AddSingleton(new TestObject());
            serviceCollection.AddDependencyScanning(b => b.AddSingleton <MyObject>().AddSingleton(new TestObject()));
            container = serviceCollection.BuildAutoFacContainer(AssemblyPaths.From("Dependous"),
                                                                logger: (item) => { output.WriteLine($"{item}"); Console.WriteLine(item); }, configurationBuilder: (cb) =>
            {
                cb.PersistScanResults = true;
                //  cb.InterceptAll<DynamicInterceptor>();
                cb.AddProbingPaths(pb => pb.AddProbingPath("../../../../../tests/Dependous.Probing/bin/Debug/netstandard2.1", (p) => p.StartsWith("Dependous.Probing")));
            });
        }
Example #17
0
        private string[] GenerateCommandLineCommands()
        {
            var args = new List <string>();

            if (RootDescriptorFiles != null)
            {
                foreach (var rootFile in RootDescriptorFiles)
                {
                    args.Add("-x");
                    args.Add(rootFile.ItemSpec);
                }
            }

            foreach (var assemblyItem in RootAssemblyNames)
            {
                args.Add("-a");
                args.Add(assemblyItem.ItemSpec);
            }

            var assemblyDirs = AssemblyPaths.Select(p => Path.GetDirectoryName(p.ItemSpec))
                               .GroupBy(d => d).Select(ds => ds.First());

            foreach (var dir in assemblyDirs)
            {
                args.Add("-d");
                args.Add(dir);
            }

            if (OutputDirectory != null)
            {
                args.Add("-out");
                args.Add(OutputDirectory.ItemSpec);
            }

            if (ExtraArgs != null)
            {
                args.AddRange(ExtraArgs.Split(' '));
            }

            if (DumpDependencies)
            {
                args.Add("--dump-dependencies");
            }

            return(args.ToArray());
        }
Example #18
0
        protected Task <TResult> RunIsolatedAsync(string configurationFile)
        {
            var assemblyDirectory = AssemblyPaths.Any() ? Path.GetDirectoryName(Path.GetFullPath(PathUtilities.ExpandFileWildcards(AssemblyPaths).First())) : configurationFile;
            var bindingRedirects  = GetBindingRedirects();
            var assemblies        = GetAssemblies(assemblyDirectory);

            if (UseNuGetCache)
            {
                var defaultNugetPackages = LoadDefaultNugetCache();
                ReferencePaths = ReferencePaths.Concat(defaultNugetPackages).ToArray();
            }

            using (var isolated = new AppDomainIsolation <IsolatedCommandAssemblyLoader>(assemblyDirectory, AssemblyConfig, bindingRedirects, assemblies))
            {
                return(Task.FromResult(isolated.Object.Run(GetType().FullName, JsonConvert.SerializeObject(this), AssemblyPaths, ReferencePaths)));
            }
        }
        public void BrowseAssemblies()
        {
            var win = new OpenFileDialog
            {
                DefaultExt  = ".dll",
                Multiselect = true,
            };

            if (win.ShowDialog() != true)
            {
                return;
            }

            var newPaths = win.FileNames.Except(AssemblyPaths, StringComparer.OrdinalIgnoreCase).ToArray();

            foreach (var fileName in newPaths)
            {
                AssemblyPaths.Add(fileName);
            }
        }
Example #20
0
        public ResolvedPackageReference(
            string packageName,
            string packageVersion,
            IReadOnlyList <string> assemblyPaths,
            string packageRoot = null,
            IReadOnlyList <string> probingPaths = null) : base(packageName, packageVersion)
        {
            if (string.IsNullOrWhiteSpace(packageVersion))
            {
                throw new ArgumentException("Value cannot be null or whitespace.", nameof(packageVersion));
            }

            AssemblyPaths = assemblyPaths ?? throw new ArgumentNullException(nameof(assemblyPaths));
            ProbingPaths  = probingPaths ?? Array.Empty <string>();
            PackageRoot   = packageRoot;

            if (PackageRoot == null &&
                AssemblyPaths.FirstOrDefault() is {} path)
            {
                PackageRoot = new FileInfo(path).Directory?.Parent?.Parent?.FullName;
            }
        }
Example #21
0
        private static void Main(string[] args)
        {
            InitializeOptions(args);

            if (Debug)
            {
                Debugger.Launch();
            }

            var assemblies = AssemblyPaths.Select(Assembly.LoadFrom);
            var listeners  = CreateListener().ToArray();
            var result     = Evaluator.Run(assemblies, listeners);

            if (Pause)
            {
                System.Console.WriteLine("Press <enter> to terminate...");
                System.Console.Read();
            }

            var exitCode = -1 * (int)result.State;

            Environment.Exit(exitCode);
        }
 public void RemoveAssembly()
 {
     AssemblyPaths.Remove(SelectedAssemblyPath);
 }
Example #23
0
        /// <summary>
        /// Discovers the assemblies.
        /// </summary>
        /// <param name="services">The services.</param>
        /// <param name="assemblyPath">The assembly path.</param>
        /// <returns></returns>
        public static AssemblyLocatorResult DiscoverAssemblies(this IServiceCollection services, AssemblyPaths assemblyPath)
        {
            Func <AssemblySearchPatternFactory, AssemblySearchPatternFactory> builder = (b) =>
            {
                foreach (var item in assemblyPath.Paths)
                {
                    b.StartsWith(item);
                }
                return(b);
            };

            return(DiscoverAssemblies(services, builder));
        }