コード例 #1
0
 public FunctionPluginLoaderOptions(
     IPluginLoadOptions <IHelloPlugin> helloPluginLoadOptions,
     IPluginLogger <IHelloPlugin> pluginLogger,
     IPluginPathProvider <IHelloPlugin> pluginPathProvider,
     IHostTypesProvider <IHelloPlugin> hostTypesProvider,
     IRemoteTypesProvider <IHelloPlugin> remoteTypesProvider,
     IRuntimePlatformContext runtimePlatformContext,
     IHostFrameworkProvider hostFrameworkProvider,
     IDependencyPathProvider <IHelloPlugin> dependencyPathProvider,
     IProbingPathsProvider <IHelloPlugin> probingPathsProvider,
     IPluginDependencyResolver <IHelloPlugin> pluginDependencyResolver,
     INativeAssemblyUnloader nativeAssemblyUnloader,
     ITempPathProvider <IHelloPlugin> tempPathProvider,
     IAssemblyLoadStrategyProvider assemblyLoadStrategyProvider,
     IPluginServerOptions pluginServerOptions,
     IHttpClientFactory httpFactory)
 {
     this.helloPluginLoadOptions       = helloPluginLoadOptions;
     this.pluginLogger                 = pluginLogger;
     this.pluginPathProvider           = pluginPathProvider;
     this.hostTypesProvider            = hostTypesProvider;
     this.remoteTypesProvider          = remoteTypesProvider;
     this.runtimePlatformContext       = runtimePlatformContext;
     this.hostFrameworkProvider        = hostFrameworkProvider;
     this.dependencyPathProvider       = dependencyPathProvider;
     this.probingPathsProvider         = probingPathsProvider;
     this.pluginDependencyResolver     = pluginDependencyResolver;
     this.nativeAssemblyUnloader       = nativeAssemblyUnloader;
     this.tempPathProvider             = tempPathProvider;
     this.assemblyLoadStrategyProvider = assemblyLoadStrategyProvider;
     this.pluginServerOptions          = pluginServerOptions;
     this.httpFactory = httpFactory;
 }
コード例 #2
0
        public PluginLoadOptionsBuilder <T> WithDefaultOptions(string pluginPath = null)
        {
            if (String.IsNullOrEmpty(pluginPath))
            {
                pluginPath = Path.Join(GetLocalExecutionPath(), "Plugins");
            }

            this.pluginPathProvider     = new DefaultPluginPathProvider <T>(pluginPath);
            this.dependencyPathProvider = new DependencyPathProvider <T>(pluginPath);

            this.runtimePlatformContext = new RuntimePlatformContext();
            this.ScanForAssemblies(composer =>
                                   composer.WithDefaultOptions <DefaultAssemblyScanner <T>, DefaultAssemblyScannerOptions <T> >());

            this.pluginAssemblyNameProvider = new PluginAssemblyNameProvider <T>($"{typeof(T).Name}.dll");
            this.sharedServicesProvider     = new DefaultSharedServicesProvider <T>(new ServiceCollection());
            this.activator    = new DefaultRemotePluginActivator <T>(this.sharedServicesProvider);
            this.proxyCreator = new PluginProxyCreator <T>();

            // Use System.Text.Json in 3.0
#if NETCORE3_0
            this.parameterConverter = new JsonSerializerParameterConverter();
            this.resultConverter    = new JsonSerializerResultConverter();
            this.assemblyLoaderType = typeof(DefaultAssemblyLoaderWithNativeResolver <T>);
#endif
            // Use Newtonsoft.Json in 2.1
#if NETCORE2_1
            this.parameterConverter = new NewtonsoftParameterConverter();
            this.resultConverter    = new NewtonsoftResultConverter();
            this.assemblyLoaderType = typeof(DefaultAssemblyLoader <T>);
#endif
            this.assemblySelector    = new DefaultAssemblySelector <T>();
            this.assemblyLoadOptions = new DefaultAssemblyLoadOptions <T>(
                PluginPlatformVersion.Empty(),
                false,
                NativeDependencyLoadPreference.PreferInstalledRuntime);

            this.probingPathsProvider = new ProbingPathsProvider <T>();

            var hostTypesProvider = new HostTypesProvider();
            hostTypesProvider.AddHostType(typeof(Prise.Plugin.PluginAttribute)); // Add the Prise.Infrastructure assembly to the host types
            hostTypesProvider.AddHostType(typeof(ServiceCollection));            // Adds the BuildServiceProvider assembly to the host types
            this.hostTypesProvider = hostTypesProvider;

            var remoteTypesProvider = new RemoteTypesProvider <T>();
            remoteTypesProvider.AddRemoteType(typeof(T)); // Add the contract to the remote types, so that we can have backwards compatibility
            this.remoteTypesProvider = remoteTypesProvider;

            this.pluginSelector               = new DefaultPluginSelector <T>();
            this.depsFileProviderType         = typeof(DefaultDepsFileProvider <T>);
            this.pluginDependencyResolverType = typeof(DefaultPluginDependencyResolver <T>);
            // Typically used for downloading and storing plugins from the network, but it could be useful for caching local plugins as well
            this.tempPathProviderType = typeof(UserProfileTempPathProvider <T>);

            this.nativeAssemblyUnloaderType = typeof(DefaultNativeAssemblyUnloader);
            this.hostFrameworkProviderType  = typeof(HostFrameworkProvider);

            return(this);
        }
コード例 #3
0
 public TenantPluginDependencyPathProvider(
     IHttpContextAccessor contextAccessor,
     TenantConfig tenantConfig,
     IPluginPathProvider <T> pluginPathProvider
     )
     : base(contextAccessor, tenantConfig)
 {
     this.pluginPathProvider = pluginPathProvider;
 }
コード例 #4
0
 public PluginLoadOptionsBuilder <T> WithPluginPath(string path)
 {
     this.pluginPathProvider = new DefaultPluginPathProvider <T>(path);
     return(this);
 }
コード例 #5
0
 public DefaultAssemblyScannerOptions(IPluginPathProvider <T> pluginPathProvider, IRuntimePlatformContext runtimePlatformContext)
 {
     this.pluginPathProvider     = pluginPathProvider;
     this.runtimePlatformContext = runtimePlatformContext;
 }
コード例 #6
0
        public PluginLoadOptionsBuilder <T> WithDefaultOptions(string pluginPath = null, ServiceLifetime serviceLifetime = ServiceLifetime.Scoped)
        {
            if (String.IsNullOrEmpty(pluginPath))
            {
                pluginPath = Path.Join(GetLocalExecutionPath(), "Plugins");
            }

            this.priseServiceLifetime   = serviceLifetime;
            this.loggerType             = typeof(NullPluginLogger <T>);
            this.pluginPathProvider     = new DefaultPluginPathProvider <T>(pluginPath);
            this.dependencyPathProvider = new DependencyPathProvider <T>(pluginPath);
            this.cacheOptions           = CacheOptions <IPluginCache <T> > .ScopedPluginCache();

            this.runtimePlatformContext = new RuntimePlatformContext();
            this.ScanForAssemblies(composer =>
                                   composer.WithDefaultOptions <DefaultAssemblyScanner <T>, DefaultAssemblyScannerOptions <T> >());

            this.pluginAssemblyNameProvider          = new PluginAssemblyNameProvider <T>($"{typeof(T).Name}.dll");
            this.sharedServicesProvider              = new DefaultSharedServicesProvider <T>(this.hostServices, this.sharedServices);
            this.pluginActivationContextProviderType = typeof(DefaultPluginActivationContextProvider <T>);
            this.pluginTypesProviderType             = typeof(DefaultPluginTypesProvider <T>);
            this.activatorType    = typeof(DefaultRemotePluginActivator <T>);
            this.proxyCreatorType = typeof(PluginProxyCreator <T>);

            this.parameterConverterType = typeof(JsonSerializerParameterConverter);
            this.resultConverterType    = typeof(JsonSerializerResultConverter);

            this.assemblyLoaderType = typeof(DefaultAssemblyLoader <T>);
#if NETCORE3_0 || NETCORE3_1 // Replace with 3.x loader
            this.assemblyLoaderType = typeof(DefaultAssemblyLoaderWithNativeResolver <T>);
#endif
            this.assemblySelectorType = typeof(DefaultAssemblySelector <T>);
            this.assemblyLoadOptions  = new DefaultAssemblyLoadOptions <T>(
                PluginPlatformVersion.Empty(),
                this.ignorePlatformInconsistencies,
                this.useCollectibleAssemblies,
                NativeDependencyLoadPreference.PreferInstalledRuntime
                );

            this.probingPathsProviderType = typeof(ProbingPathsProvider <T>);

            var hostTypesProvider = new HostTypesProvider <T>();
            hostTypesProvider.AddHostType(typeof(Prise.Plugin.PluginAttribute)); // Add the Prise.Infrastructure assembly to the host types
            hostTypesProvider.AddHostType(typeof(ServiceCollection));            // Adds the BuildServiceProvider assembly to the host types
            this.hostTypesProvider = hostTypesProvider;

            var downgradableDependenciesProvider = new DowngradableDependenciesProvider <T>();
            downgradableDependenciesProvider.AddDowngradableType(typeof(Prise.Plugin.PluginAttribute)); // Add the Prise.Infrastructure assembly to the host types
            this.downgradableDependenciesProvider = downgradableDependenciesProvider;

            var remoteTypesProvider = new RemoteTypesProvider <T>();
            remoteTypesProvider.AddRemoteType(typeof(T)); // Add the contract to the remote types, so that we can have backwards compatibility
            this.remoteTypesProvider = remoteTypesProvider;

            this.pluginSelectorType           = typeof(DefaultPluginSelector <T>);
            this.depsFileProviderType         = typeof(DefaultDepsFileProvider <T>);
            this.pluginDependencyResolverType = typeof(DefaultPluginDependencyResolver <T>);
            // Typically used for downloading and storing plugins from the network, but it could be useful for caching local plugins as well
            this.tempPathProviderType = typeof(UserProfileTempPathProvider <T>);

            this.nativeAssemblyUnloaderType = typeof(DefaultNativeAssemblyUnloader);
            this.hostFrameworkProviderType  = typeof(HostFrameworkProvider);

            return(this);
        }