/// <summary>
    /// 注册 Librame 核心扩展构建器。
    /// </summary>
    /// <param name="services">给定的 <see cref="IServiceCollection"/>。</param>
    /// <param name="setupOptions">给定可用于设置 <see cref="CoreExtensionOptions"/> 选项的动作(可选;为空则不设置)。</param>
    /// <param name="configuration">给定可用于 <see cref="CoreExtensionOptions"/> 选项的配置对象(可选;为空则不配置)。</param>
    /// <returns>返回 <see cref="CoreExtensionBuilder"/>。</returns>
    public static CoreExtensionBuilder AddLibrameCore(this IServiceCollection services,
                                                      Action <CoreExtensionOptions>?setupOptions = null, IConfiguration?configuration = null)
    {
        // 添加依赖服务
        if (!services.ContainsService <IMemoryCache>())
        {
            services.AddMemoryCache();
        }

        if (!services.ContainsService <IHttpClientFactory>())
        {
            services.AddHttpClient();
        }

        // 配置扩展选项
        services.ConfigureExtensionOptions(setupOptions, configuration);

        // 创建扩展构建器
        var builder = new CoreExtensionBuilder(services);

        // 注册扩展服务集合
        return(builder
               .AddCommon()
               .AddCryptography()
               .AddNetwork()
               .AddStorage());
    }
    private static CoreExtensionBuilder AddNetwork(this CoreExtensionBuilder builder)
    {
        builder.TryAddOrReplaceService <IHttpClientInvokerFactory, InternalHttpClientInvokerFactory>();
        builder.TryAddOrReplaceService <IHttpEndpointsInvoker, InternalHttpEndpointsInvoker>();

        return(builder);
    }
    private static CoreExtensionBuilder AddCommon(this CoreExtensionBuilder builder)
    {
        builder.TryAddOrReplaceService(typeof(ICloneable <>), typeof(Cloneable <>));
        builder.TryAddOrReplaceService(typeof(IDecoratable <>), typeof(Decoratable <>));

        return(builder);
    }
    private static CoreExtensionBuilder AddStorage(this CoreExtensionBuilder builder)
    {
        builder.TryAddOrReplaceService <IStorableFileManager, InternalStorableFileManager>();
        builder.TryAddOrReplaceService <IWebFilePermission, InternalWebFilePermission>();
        builder.TryAddOrReplaceService <IWebStorableFileTransfer, InternalWebStorableFileTransfer>();

        return(builder);
    }
    private static CoreExtensionBuilder AddCryptography(this CoreExtensionBuilder builder)
    {
        builder.TryAddOrReplaceService <IAlgorithmParameterGenerator, InternalAlgorithmParameterGenerator>();
        builder.TryAddOrReplaceService <IAsymmetricAlgorithm, InternalAsymmetricAlgorithm>();
        builder.TryAddOrReplaceService <ISymmetricAlgorithm, InternalSymmetricAlgorithm>();

        return(builder);
    }
Ejemplo n.º 6
0
        static CoreExtensionBuilderHelper()
        {
            if (_builder is null)
            {
                var fileProvider = new PhysicalStorableFileProvider(PathExtensions.CurrentDirectoryWithoutDevelopmentRelativeSubpath);

                var services = new ServiceCollection();
                _builder = services.AddLibrameCore(opts =>
                {
                    opts.WebFile.AccessToken = "Test access token.";
                    opts.WebFile.UserName    = "******";
                    opts.WebFile.Password    = "******";
                    opts.WebFile.JwtToken    = "Test jwt token.";
                    opts.WebFile.CookieName  = "Test cookie name.";

                    opts.WebFile.FileProviders.Add(fileProvider);
                });
            }

            if (_services is null)
            {
                _services = _builder.Services.BuildServiceProvider();
            }
        }