/// <summary>
        /// Adds user impersonation components, including <see cref="IUserInfo"/> implementation for impersonated users and a dashboard snippet.
        /// </summary>
        public static RhetosServiceCollectionBuilder AddImpersonation(this RhetosServiceCollectionBuilder builder, Action <ImpersonationOptions> configureOptions = null)
        {
            builder.Services.AddHttpContextAccessor();

            builder.Services.AddOptions();
            if (configureOptions != null)
            {
                builder.Services.Configure(configureOptions);
            }

            builder.AddRestApiFilters();

            builder.ConfigureRhetosHost((serviceProvider, rhetosHostBuilder) =>
                                        rhetosHostBuilder.ConfigureContainer(containerBuilder =>
            {
                containerBuilder.Register(_ => serviceProvider.GetRequiredService <IHttpContextAccessor>()).SingleInstance().ExternallyOwned();
                containerBuilder.Register(_ => serviceProvider.GetRequiredService <IDataProtectionProvider>()).SingleInstance().ExternallyOwned();
                containerBuilder.Register(_ => serviceProvider.GetRequiredService <IOptions <ImpersonationOptions> >().Value).SingleInstance().ExternallyOwned();

                containerBuilder.RegisterType <RhetosAspNetCoreIdentityUser>().InstancePerMatchingLifetimeScope(UnitOfWorkScope.ScopeName);
                containerBuilder.Register <BaseAuthentication>(context => new BaseAuthentication(context.Resolve <RhetosAspNetCoreIdentityUser>())).InstancePerMatchingLifetimeScope(UnitOfWorkScope.ScopeName);
                containerBuilder.RegisterType <ImpersonationService>().InstancePerMatchingLifetimeScope(UnitOfWorkScope.ScopeName);
                containerBuilder.Register <IUserInfo>(context => context.Resolve <ImpersonationService>().GetUserInfo()).InstancePerMatchingLifetimeScope(UnitOfWorkScope.ScopeName);
            }));

            builder.Services.AddDataProtection();
            builder.Services.AddMvcCore()
            .AddApplicationPart(typeof(ImpersonationController).Assembly);

            builder.AddDashboardSnippet <ImpersonationDashboardSnippet>();

            return(builder);
        }
Пример #2
0
        /// <summary>
        /// Configures Rhetos localization so that it uses the <see cref="IStringLocalizerFactory"/> implementation registered in the <see cref="IServiceCollection"/>
        /// </summary>
        public static RhetosServiceCollectionBuilder AddHostLocalization(this RhetosServiceCollectionBuilder rhetosServiceCollectionBuilder, Action <HostLocalizerOptions> configureOptions = null)
        {
            rhetosServiceCollectionBuilder.Services.AddOptions();
            if (configureOptions != null)
            {
                rhetosServiceCollectionBuilder.Services.Configure(configureOptions);
            }
            rhetosServiceCollectionBuilder.ConfigureRhetosHost(ConfigureLocalizer);
            rhetosServiceCollectionBuilder.Services.AddSingleton <HostLocalizer>();

            return(rhetosServiceCollectionBuilder);
        }
Пример #3
0
        /// <summary>
        /// Adds Rhetos components to the host application.
        /// </summary>
        /// <remarks>
        /// The following public Rhetos components are registered to <see cref="IServiceCollection"/>:
        ///   <list type="bullet">
        ///     <item><description><see cref="IRhetosComponent{T}"/>, allows direct access to Rhetos components from host application's services.</description></item>
        ///     <item><description><see cref="RhetosHost"/>, for internal access to IoC container.</description></item>
        ///   </list>
        /// </remarks>
        /// <returns>
        /// A <see cref="RhetosServiceCollectionBuilder"/> that can be used to add additional Rhetos-specific services to <see cref="IServiceCollection"/>.
        /// </returns>
        public static RhetosServiceCollectionBuilder AddRhetosHost(
            this IServiceCollection serviceCollection,
            Action <IServiceProvider, IRhetosHostBuilder> configureRhetosHost = null)
        {
            var builder = new RhetosServiceCollectionBuilder(serviceCollection);

            builder.Services.AddOptions();

            if (configureRhetosHost != null)
            {
                builder.ConfigureRhetosHost(configureRhetosHost);
            }

            builder.Services.TryAddSingleton(serviceProvider => CreateRhetosHost(serviceProvider));
            builder.Services.TryAddScoped <RhetosScopeServiceProvider>();
            // IRhetosComponent is registered as a transient component but the value of
            // IRhetosComponent will retain its scope that is specified in the Autofac IoC container
            builder.Services.TryAddTransient(typeof(IRhetosComponent <>), typeof(RhetosComponent <>));

            return(builder);
        }
Пример #4
0
        /// <summary>
        /// Configures Rhetos logging so that it uses the host application's logging (<see cref="Logging.ILogger"/> implementation registered in the <see cref="IServiceCollection"/>).
        /// </summary>
        public static RhetosServiceCollectionBuilder AddHostLogging(this RhetosServiceCollectionBuilder rhetosServiceCollectionBuilder)
        {
            rhetosServiceCollectionBuilder.ConfigureRhetosHost(ConfigureLogProvider);

            return(rhetosServiceCollectionBuilder);
        }