using System; using System.Threading.Tasks; using Prise.Activation; using Prise.AssemblyLoading; using Prise.AssemblyScanning; using Prise.Proxy; using Prise.Infrastructure; using Prise.Platform; using System.Collections.Generic; namespace Prise.DependencyInjection { public static class DefaultFactories { public static Func RuntimeDefaultAssemblyContext = () => new RuntimeDefaultAssemblyContext(); public static Func DefaultNugetPackageUtilities = () => new DefaultNugetPackageUtilities(); public static Func DefaultPlatformAbstraction = () => new DefaultPlatformAbstraction(); public static Func DefaultDirectoryTraverser = () => new DefaultDirectoryTraverser(); public static Func DefaultMetadataLoadContext = (fullPathToAssembly) => new DefaultMetadataLoadContext(fullPathToAssembly); public static Func DefaultAssemblyScanner = () => new DefaultAssemblyScanner(DefaultMetadataLoadContext, DefaultDirectoryTraverser); public static Func DefaultNuGetAssemblyScanner = () => new DefaultNugetPackageAssemblyScanner(DefaultMetadataLoadContext, DefaultDirectoryTraverser, DefaultNugetPackageUtilities); public static Func DefaultPluginTypeSelector = () => new DefaultPluginTypeSelector(); public static Func DefaultParameterConverter = () => new JsonSerializerParameterConverter(); public static Func DefaultResultConverter = () => new JsonSerializerResultConverter(); public static Func DefaultPluginActivator = () => new DefaultPluginActivator(DefaultPluginActivationContextProvider, DefaultRemotePluginActivator, DefaultPluginProxyCreator); public static Func DefaultPluginActivationContextProvider = () => new DefaultPluginActivationContextProvider(); public static Func DefaultRemotePluginActivator = () => new DefaultRemotePluginActivator(DefaultBootstrapperServiceProvider, DefaultPluginServiceProvider); public static Func, IBootstrapperServiceProvider> DefaultBootstrapperServiceProvider = (sp, hostTypes) => new DefaultBootstrapperServiceProvider(sp, hostTypes); public static Func, IEnumerable, IPluginServiceProvider> DefaultPluginServiceProvider = (sp, hostTypes, pluginTypes) => new DefaultPluginServiceProvider(sp, hostTypes, pluginTypes); public static Func DefaultPluginProxyCreator = () => new DefaultPluginProxyCreator(); public static Func DefaultAssemblyLoader = () => new DefaultAssemblyLoader(DefaultAssemblyLoadContextFactory); public static Func DefaultNativeAssemblyUnloaderFactory = () => new DefaultNativeAssemblyUnloader(); public static Func DefaultAssemblyDependencyResolver = (p) => new DefaultAssemblyDependencyResolver(p); public static Func DefaultFileSystemUtilities = () => new DefaultFileSystemUtilities(); public static Func DefaultPluginDependencyContextProvider = () => new DefaultPluginDependencyContextProvider(DefaultPlatformAbstraction, DefaultRuntimePlatformContextFactory); public static Func DefaultAssemblyLoadContextFactory = () => new DefaultAssemblyLoadContext( DefaultNativeAssemblyUnloaderFactory, DefaultPluginDependencyResolverFactory, DefaultAssemblyLoadStrategyFactory, DefaultAssemblyDependencyResolver, DefaultFileSystemUtilities, RuntimeDefaultAssemblyContext, DefaultPluginDependencyContextProvider ); public static Func DefaultRuntimePlatformContextFactory = () => new DefaultRuntimePlatformContext(DefaultPlatformAbstraction, DefaultDirectoryTraverser); public static Func DefaultAssemblyLoadStrategyFactory = () => new DefaultAssemblyLoadStrategy(); public static Func DefaultPluginDependencyResolverFactory = () => new DefaultPluginDependencyResolver(DefaultRuntimePlatformContextFactory); } }