/// <summary> /// Initialize assemblies setup. /// </summary> /// <param name="logger"><see cref="ILogger"/> to use for logging.</param> /// <param name="entryAssembly"><see cref="Assembly"/> to use as entry assembly - null indicates it will get it from the <see cref="Assembly.GetEntryAssembly()"/> method.</param> /// <param name="defaultAssemblyProvider">The default <see cref="ICanProvideAssemblies"/> - null inidicates it will use the default implementation.</param> /// <param name="excludeAllCallback">A callback to build on the exclude all specification.</param> /// <returns>Discovered <see cref="IAssemblies"/>.</returns> public static IAssemblies Start( ILogger logger, Assembly entryAssembly = null, ICanProvideAssemblies defaultAssemblyProvider = null, Action <ExcludeAll> excludeAllCallback = null) { var assembliesConfigurationBuilder = new AssembliesConfigurationBuilder(); var assembliesSpecification = assembliesConfigurationBuilder .ExcludeAll() .ExceptProjectLibraries() .ExceptDolittleLibraries(); excludeAllCallback?.Invoke(assembliesSpecification); if (entryAssembly == null) { entryAssembly = Assembly.GetEntryAssembly(); } var assembliesConfiguration = new AssembliesConfiguration(assembliesConfigurationBuilder.RuleBuilder); var assemblyFilters = new AssemblyFilters(assembliesConfiguration); var assemblyProvider = new AssemblyProvider( new ICanProvideAssemblies[] { defaultAssemblyProvider ?? new DefaultAssemblyProvider(logger, entryAssembly) }, assemblyFilters, new AssemblyUtility(), logger); var assemblies = new Assemblies(entryAssembly, assemblyProvider); return(assemblies); }
/// <summary> /// With a custom <see cref="ICanProvideAssemblies"/> /// </summary> /// <param name="bootBuilder"><see cref="BootBuilder"/> to build</param> /// <param name="assemblyProvider">An <see cref="ICanProvideAssemblies">assembly provider</see> instance</param> /// <returns>Chained <see cref="BootBuilder"/></returns> public static IBootBuilder WithAssemblyProvider(this IBootBuilder bootBuilder, ICanProvideAssemblies assemblyProvider) { bootBuilder.Set <DiscoverySettings>(_ => _.AssemblyProvider, assemblyProvider); return(bootBuilder); }