private void RegisterBluePrintItem(List <SmartServiceDescriptor> smartServiceDescriptors, List <EventSubscriptionDescriptor> eventSubs, Dictionary <Type, MethodInfo[]> methodsCache, HashSet <string> flags, ShellBlueprintDependencyItem item, Type interfaceType)
        {
            SmartServiceDescriptor descriptor = null;

            if (typeof(ISingletonDependency).GetTypeInfo().IsAssignableFrom(interfaceType))
            {
                eventSubs.AddRange(CreateDescriptor(methodsCache, flags, interfaceType, item.Type, ServiceLifetime.Singleton));
                descriptor = ServiceDescriber.Singleton(interfaceType, item.Type, SmartOptions.Append);
                item.Interfaces.Add(new Tuple <Type, ServiceLifetime>(interfaceType, ServiceLifetime.Singleton));
            }
            else if (typeof(ITransientDependency).GetTypeInfo().IsAssignableFrom(interfaceType))
            {
                eventSubs.AddRange(CreateDescriptor(methodsCache, flags, interfaceType, item.Type, ServiceLifetime.Transient));
                descriptor = ServiceDescriber.Transient(interfaceType, item.Type, SmartOptions.Append);
                item.Interfaces.Add(new Tuple <Type, ServiceLifetime>(interfaceType, ServiceLifetime.Transient));
            }
            else
            {
                eventSubs.AddRange(CreateDescriptor(methodsCache, flags, interfaceType, item.Type, ServiceLifetime.Scoped));
                descriptor = ServiceDescriber.Scoped(interfaceType, item.Type, SmartOptions.Append);
                item.Interfaces.Add(new Tuple <Type, ServiceLifetime>(interfaceType, ServiceLifetime.Scoped));
            }

            if (descriptor != null)
            {
                descriptor = this.OnDependencyRegistering(descriptor);
                smartServiceDescriptors.Add(descriptor);
            }
        }
Beispiel #2
0
        public static IEnumerable <IServiceDescriptor> GetDefaultRoleServices <TRole>(IConfiguration configuration)
            where TRole : class
        {
            var describe = new ServiceDescriber(configuration);

            yield return(describe.Instance <IRoleValidator <TRole> >(new RoleValidator <TRole>()));
        }
        public static SchubertServicesBuilder AddEntityFrameworkFeature(this SchubertServicesBuilder builder, Action <DbBuilder> setup = null)
        {
            DbOptions options = new DbOptions();

            if (builder.AddedModules.Add(_module))
            {
                var configuration = builder.Configuration.GetSection("Schubert:Data") as IConfiguration ?? new ConfigurationBuilder().Build();
                builder.ServiceCollection.Configure <DbOptions>(configuration);

                var schubertDataSetup = new ConfigureFromConfigurationOptions <DbOptions>(configuration);
                schubertDataSetup.Configure(options);
            }


            DbBuilder dbBuilder = new DbBuilder();

            if (setup != null)
            {
                setup(dbBuilder);
                if (dbBuilder.Setup != null)
                {
                    dbBuilder.Setup(options);
                    builder.ServiceCollection.Configure(dbBuilder.Setup);
                }
            }

            options.DbContextSettings = dbBuilder.DbSettings;
            builder.ServiceCollection.Configure <DbOptions>(dbOp =>
            {
                dbOp.DbContextSettings.AddRange(dbBuilder.DbSettings, true);
            });
            _dbConnectionMappings.AddRange(dbBuilder.DbContexts, true);

            if (dbBuilder.ShellDbAdded)
            {
                builder.ServiceCollection.AddSmart(ServiceDescriber.Scoped <IRepository <ShellDescriptorRecord>, Repository <ShellDescriptorRecord, ShellDescriptorDbContext> >());
                builder.ServiceCollection.AddSmart(ServiceDescriber.Scoped <IRepository <SettingRecord>, Repository <SettingRecord, ShellDescriptorDbContext> >());
                builder.ServiceCollection.AddSmart(ServiceDescriber.Scoped <IShellDescriptorManager, ShellDescriptorManager>());
            }

            builder.ServiceCollection.AddSmart(EntityFrameworkServices.GetServices(options));


            foreach (var action in dbBuilder.DbConfigurings.Values)
            {
                action(builder.ServiceCollection);
            }

            builder.ServiceCollection.AddSmart(ServiceDescriber.Scoped(
                                                   s =>
            {
                IOptions <DbOptions> dbOps = s.GetRequiredService <IOptions <DbOptions> >();
                return(new DbContextResources(s, dbBuilder.DefaultDbConnectionName, _dbConnectionMappings));
            },
                                                   SmartOptions.Replace));

            builder.ServiceCollection.TryAddScoped <IDatabaseContext>(s => s.GetRequiredService <DbContextResources>());

            return(builder);
        }
Beispiel #4
0
        /// <summary>
        /// 使用 Redis 缓存服务(将以 Redis 缓存实现 <see cref="ICacheManager"/> 接口,默认连接配置节为 Schubert:Redis。)。
        /// </summary>
        /// <param name="builder"></param>
        /// <param name="setup"> Redis 缓存的配置安装方法。</param>
        /// <returns></returns>
        public static SchubertServicesBuilder AddRedisCache(this SchubertServicesBuilder builder, Action <SchubertRedisOptions> setup = null)
        {
            var configuration = builder.Configuration.GetSection("Schubert:Redis") as IConfiguration ?? new ConfigurationBuilder().Build();

            builder.ServiceCollection.Configure <SchubertRedisOptions>(configuration);

            SchubertRedisOptions options = new SchubertRedisOptions();
            var redisSetup = new ConfigureFromConfigurationOptions <SchubertRedisOptions>(configuration);

            redisSetup.Configure(options);
            if (setup != null)
            {
                setup(options);
                builder.ServiceCollection.Configure(setup);
            }

            builder.ServiceCollection.AddSmart(ServiceDescriber.Singleton <ICacheManager, RedisCacheManager>(SmartOptions.Replace));
            if (builder.AddedModules.Add(_module))
            {
                builder.ServiceCollection.AddSmart(ServiceDescriber.Singleton <IRedisCacheSerializer, JsonNetSerializer>(SmartOptions.Append));
            }

            if (options.ConnectionString.IsNullOrWhiteSpace())
            {
                throw new SchubertException("必须为 RedisCacheManager 指定连接字符串,可以通过 Schubert:Redis:ConnectionString 配置节配置。");
            }

            return(builder);
        }
        public static IServiceCollection AddRouting(this IServiceCollection services, IConfiguration config = null)
        {
            var describe = new ServiceDescriber(config);

            services.TryAdd(describe.Transient <IInlineConstraintResolver, DefaultInlineConstraintResolver>());
            return(services);
        }
Beispiel #6
0
        public static IEnumerable <IServiceDescriptor> GetDefaultServices(IConfiguration configuration)
        {
            var describer = new ServiceDescriber(configuration);

            yield return(describer.Transient <IHostingEngine, HostingEngine>());

            yield return(describer.Transient <IServerManager, ServerManager>());

            yield return(describer.Transient <IStartupManager, StartupManager>());

            yield return(describer.Transient <IStartupLoaderProvider, StartupLoaderProvider>());

            yield return(describer.Transient <IApplicationBuilderFactory, ApplicationBuilderFactory>());

            yield return(describer.Transient <IHttpContextFactory, HttpContextFactory>());

            yield return(describer.Singleton <ITypeActivator, TypeActivator>());

            yield return(describer.Instance <IApplicationLifetime>(new ApplicationLifetime()));

            // TODO: Do we expect this to be provide by the runtime eventually?
            yield return(describer.Singleton <ILoggerFactory, LoggerFactory>());

            yield return(describer.Scoped(typeof(IContextAccessor <>), typeof(ContextAccessor <>)));

            foreach (var service in OptionsServices.GetDefaultServices())
            {
                yield return(service);
            }

            foreach (var service in DataProtectionServices.GetDefaultServices())
            {
                yield return(service);
            }
        }
        public static IEnumerable <IServiceDescriptor> GetDefaultServices(Type userType, Type roleType, Type contextType, Type keyType = null, IConfiguration config = null)
        {
            ServiceDescriber describe;

            if (config == null)
            {
                describe = new ServiceDescriber();
            }
            else
            {
                describe = new ServiceDescriber(config);
            }
            Type userStoreType;
            Type roleStoreType;

            if (keyType != null)
            {
                userStoreType = typeof(UserStore <, , ,>).MakeGenericType(userType, roleType, contextType, keyType);
                roleStoreType = typeof(RoleStore <, ,>).MakeGenericType(roleType, contextType, keyType);
            }
            else
            {
                userStoreType = typeof(UserStore <, ,>).MakeGenericType(userType, roleType, contextType);
                roleStoreType = typeof(RoleStore <,>).MakeGenericType(roleType, contextType);
            }

            yield return(describe.Scoped(
                             typeof(IUserStore <>).MakeGenericType(userType),
                             userStoreType));

            yield return(describe.Scoped(
                             typeof(IRoleStore <>).MakeGenericType(roleType),
                             roleStoreType));
        }
Beispiel #8
0
        /// <summary>
        /// 为 Asp.Net Identity 配置 Dapper 持久化存储。
        /// </summary>
        /// <typeparam name="TUser">用户类型。</typeparam>
        /// <typeparam name="TRole">角色类型。</typeparam>
        /// <param name="builder"></param>
        /// <returns></returns>
        internal static IdentityBuilder AddDapperStores <TUser, TRole>(this IdentityBuilder builder)
            where TUser : UserBase
            where TRole : RoleBase
        {
            builder.Services.AddSmart(ServiceDescriber.Scoped <IUserStore <TUser>, DapperUserStore <TUser, TRole> >(SmartOptions.Replace));
            builder.Services.AddSmart(ServiceDescriber.Scoped <IRoleStore <TRole>, DapperRoleStore <TRole> >(SmartOptions.Replace));

            return(builder);
        }
        public static IEnumerable <IServiceDescriptor> GetDefaultServices(IConfiguration configuration)
        {
            var serviceDescriber = new ServiceDescriber(configuration);

            // REVIEW: All singletons can't be right but we're just doing this because
            // we had this before

            yield return(serviceDescriber.Singleton <IMessageBus, MessageBus>());

            yield return(serviceDescriber.Singleton <IMemoryPool, MemoryPool>());

            yield return(serviceDescriber.Singleton <IStringMinifier, StringMinifier>());

            yield return(serviceDescriber.Singleton <ITransportManager, TransportManager>());

            yield return(serviceDescriber.Singleton <ITransportHeartbeat, TransportHeartbeat>());

            yield return(serviceDescriber.Singleton <IConnectionManager, ConnectionManager>());

            yield return(serviceDescriber.Singleton <IAckHandler, AckHandler>());

            yield return(serviceDescriber.Singleton <IAssemblyLocator, DefaultAssemblyLocator>());

            yield return(serviceDescriber.Singleton <IHubManager, DefaultHubManager>());

            yield return(serviceDescriber.Singleton <IMethodDescriptorProvider, ReflectedMethodDescriptorProvider>());

            yield return(serviceDescriber.Singleton <IHubDescriptorProvider, ReflectedHubDescriptorProvider>());

            yield return(serviceDescriber.Singleton <IPerformanceCounterManager, PerformanceCounterManager>());

            yield return(serviceDescriber.Singleton <JsonSerializer, JsonSerializer>());

            yield return(serviceDescriber.Singleton <IUserIdProvider, PrincipalUserIdProvider>());

            yield return(serviceDescriber.Singleton <IParameterResolver, DefaultParameterResolver>());

            yield return(serviceDescriber.Singleton <IHubActivator, DefaultHubActivator>());

            yield return(serviceDescriber.Singleton <IJavaScriptProxyGenerator, DefaultJavaScriptProxyGenerator>());

            yield return(serviceDescriber.Singleton <IJavaScriptMinifier, NullJavaScriptMinifier>());

            yield return(serviceDescriber.Singleton <IHubRequestParser, HubRequestParser>());

            // REVIEW: This used to be lazy
            var pipeline = new HubPipeline();

            pipeline.AddModule(new AuthorizeModule());

            yield return(serviceDescriber.Instance <IHubPipeline>(pipeline));

            yield return(serviceDescriber.Instance <IHubPipelineInvoker>(pipeline));

            // TODO: Just use the new IDataProtectionProvider abstraction directly here
            yield return(serviceDescriber.Singleton <IProtectedData, DataProtectionProviderProtectedData>());
        }
        public static IEnumerable <IServiceDescriptor> DefaultServices()
        {
            var describer = new ServiceDescriber();

            yield return(describer.Transient <IFakeService, FakeService>());

            yield return(describer.Transient <IFakeMultipleService, FakeOneMultipleService>());

            yield return(describer.Transient <IFakeMultipleService, FakeTwoMultipleService>());

            yield return(describer.Transient <IFakeOuterService, FakeOuterService>());

            yield return(describer.Instance <IFakeServiceInstance>(new FakeService()
            {
                Message = "Instance"
            }));

            yield return(describer.Scoped <IFakeScopedService, FakeService>());

            yield return(describer.Singleton <IFakeSingletonService, FakeService>());

            yield return(describer.Transient <IFakeFallbackService, FakeService>());

            yield return(describer.Transient <IDependOnNonexistentService, DependOnNonexistentService>());

            yield return(describer.Describe(
                             typeof(IFakeOpenGenericService <string>),
                             typeof(FakeService),
                             lifecycle: LifecycleKind.Transient));

            yield return(describer.Describe(
                             typeof(IFakeOpenGenericService <>),
                             typeof(FakeOpenGenericService <>),
                             lifecycle: LifecycleKind.Transient));

            yield return(describer.Transient <IFactoryService>(provider =>
            {
                var fakeService = provider.GetService <IFakeService>();
                return new TransientFactoryService
                {
                    FakeService = fakeService,
                    Value = 42
                };
            }));

            yield return(describer.Scoped <ScopedFactoryService>(provider =>
            {
                var fakeService = provider.GetService <IFakeService>();
                return new ScopedFactoryService
                {
                    FakeService = fakeService,
                };
            }));

            yield return(describer.Transient <ServiceAcceptingFactoryService, ServiceAcceptingFactoryService>());
        }
Beispiel #11
0
        private IEnumerable <IServiceDescriptor> DefaultServices()
        {
            var describer = new ServiceDescriber();

            yield return(describer.Transient <IKruntEngine, DefaultKruntEngine>());

            yield return(describer.Transient <IKruntLogger, ConsoleKruntLogger>());

            yield return(describer.Transient <IKruntSettings, DefaultKruntSettings>());
        }
Beispiel #12
0
        public static IEnumerable <IServiceDescriptor> GetDefaultServices(IConfiguration configuration)
        {
            var describe = new ServiceDescriber(configuration);

            yield return(describe.Describe(
                             typeof(IOptionsAccessor <>),
                             typeof(OptionsAccessor <>),
                             null,
                             LifecycleKind.Singleton));
        }
        public override void ConfigureServices(SchubertServicesBuilder servicesBuilder, SchubertWebOptions options)
        {
            var identitySvcdescriptor = ServiceDescriber.Scoped <IIdentityService, TIdentityService>();

            servicesBuilder.ServiceCollection.AddSmart(identitySvcdescriptor);

            servicesBuilder.ServiceCollection
            .AddIdentity <TUser, TRole>(iop => _configure?.Invoke(iop))
            .AddDefaultTokenProviders()
            .AddDapperStores <TUser, TRole>();
        }
Beispiel #14
0
        public IEnumerable<IServiceDescriptor> DefineServices()
        {
            var describer = new ServiceDescriber();
            yield return describer.Singleton<ICall, CallOne>();
            yield return describer.Scoped<ICall, CallTwo>();
            yield return describer.Transient<ICall, CallThree>();

            yield return describer.Transient<ITypeActivator, TypeActivator>();
            yield return describer.Describe(
                typeof(IContextAccessor<>),
                typeof(ContextAccessor<>),
                implementationInstance: null,
                lifecycle: LifecycleKind.Scoped);
        }
        /// <summary>
        /// 获取蓝图中的依赖项和事件。
        /// </summary>
        private Tuple <IEnumerable <SmartServiceDescriptor>, IEnumerable <EventSubscriptionDescriptor> > BuildDependencies(ShellBlueprint blueprint)
        {
            List <SmartServiceDescriptor> smartServiceDescriptors = new List <SmartServiceDescriptor>();

            smartServiceDescriptors.Add(ServiceDescriber.Instance(blueprint, SmartOptions.Replace));
            smartServiceDescriptors.Add(ServiceDescriber.Instance(blueprint.Descriptor, SmartOptions.Replace));

            SetupServiceDescriptors(blueprint, smartServiceDescriptors);

            List <EventSubscriptionDescriptor> eventSubs = new List <EventSubscriptionDescriptor>();

            SetupDependencies(blueprint, smartServiceDescriptors, eventSubs);
            return(new Tuple <IEnumerable <SmartServiceDescriptor>, IEnumerable <EventSubscriptionDescriptor> >(smartServiceDescriptors, eventSubs));
        }
Beispiel #16
0
        public static IEnumerable <IServiceDescriptor> GetDefaultUserServices <TUser>(IConfiguration configuration)
            where TUser : class
        {
            var describe = new ServiceDescriber(configuration);

            yield return(describe.Transient <IUserValidator <TUser>, UserValidator <TUser> >());

            yield return(describe.Transient <IPasswordValidator <TUser>, PasswordValidator <TUser> >());

            yield return(describe.Transient <IPasswordHasher <TUser>, PasswordHasher <TUser> >());

            yield return(describe.Transient <IUserNameNormalizer, UpperInvariantUserNameNormalizer>());

            // TODO: rationalize email/sms/usertoken services
        }
Beispiel #17
0
        public static IEnumerable <IServiceDescriptor> GetDefaultServices(IConfiguration configuration)
        {
            var describer = new ServiceDescriber(configuration);

            yield return(describer.Transient <IHostingEngine, HostingEngine>());

            yield return(describer.Transient <IServerManager, ServerManager>());

            yield return(describer.Transient <IStartupManager, StartupManager>());

            yield return(describer.Transient <IStartupLoaderProvider, StartupLoaderProvider>());

            yield return(describer.Transient <IBuilderFactory, BuilderFactory>());

            yield return(describer.Transient <IHttpContextFactory, HttpContextFactory>());

            yield return(describer.Transient <ITypeActivator, TypeActivator>());

            yield return(describer.Instance <IApplicationLifetime>(new ApplicationLifetime()));

            // TODO: We expect this to be provide by the runtime eventually.
            yield return(describer.Instance <ILoggerFactory>(new NullLoggerFactory()));

            yield return(new ServiceDescriptor
            {
                ServiceType = typeof(IContextAccessor <>),
                ImplementationType = typeof(ContextAccessor <>),
                Lifecycle = LifecycleKind.Scoped
            });

            if (PlatformHelper.IsMono)
            {
#if NET45
                yield return(describer.Instance <IDataProtectionProvider>(DataProtectionProvider.CreateFromLegacyDpapi()));
#endif
            }
            else
            {
                // The default IDataProtectionProvider is a singleton.
                // Note: DPAPI isn't usable in IIS where the user profile hasn't been loaded, but loading DPAPI
                // is deferred until the first call to Protect / Unprotect. It's up to an IIS-based host to
                // replace this service as part of application initialization.
                yield return(describer.Instance <IDataProtectionProvider>(DataProtectionProvider.CreateFromDpapi()));
            }
        }
Beispiel #18
0
        public IEnumerable <IServiceDescriptor> DefineServices()
        {
            var describer = new ServiceDescriber();

            yield return(describer.Singleton <ICall, CallOne>());

            yield return(describer.Scoped <ICall, CallTwo>());

            yield return(describer.Transient <ICall, CallThree>());

            yield return(describer.Transient <ITypeActivator, TypeActivator>());

            yield return(describer.Describe(
                             typeof(IContextAccessor <>),
                             typeof(ContextAccessor <>),
                             implementationInstance: null,
                             lifecycle: LifecycleKind.Scoped));
        }
        /// <summary>
        /// 添加任务调度组件。
        /// </summary>
        /// <param name="builder"><see cref="SchubertServicesBuilder"/> 对象。</param>
        /// <param name="setup">用于配置调度组件的方法。</param>
        /// <returns></returns>
        public static SchubertServicesBuilder AddJobScheduling(this SchubertServicesBuilder builder, Action <SchedulingOptions> setup = null)
        {
            if (builder.AddedModules.Add(_module))
            {
                builder.ServiceCollection.AddSmart(ServiceDescriber.Singleton(typeof(IWorkContextProvider), typeof(JobWorkContextProvider), SmartOptions.Append));
            }
            builder.ServiceCollection.AddSmart(ServiceDescriber.Singleton(typeof(ISchedulingServer), typeof(QuartzSchedulingServer), SmartOptions.TryAdd));

            var schedulingConfiguration = builder.Configuration.GetSection("Schubert:Scheduling");

            builder.ServiceCollection.Configure <SchedulingOptions>(schedulingConfiguration);
            if (setup != null)
            {
                builder.ServiceCollection.Configure(setup);
            }
            ShellEvents.EngineStarted -= ShellEvents_OnEngineStarted;
            ShellEvents.EngineStarted += ShellEvents_OnEngineStarted;
            return(builder);
        }
        public static IEnumerable <IServiceDescriptor> DefaultServices()
        {
            var describer = new ServiceDescriber();

            yield return(describer.Transient <IFakeService, FakeService>());

            yield return(describer.Transient <IFakeMultipleService, FakeOneMultipleService>());

            yield return(describer.Transient <IFakeMultipleService, FakeTwoMultipleService>());

            yield return(describer.Transient <IFakeOuterService, FakeOuterService>());

            yield return(describer.Instance <IFakeServiceInstance>(new FakeService()
            {
                Message = "Instance"
            }));

            yield return(describer.Scoped <IFakeScopedService, FakeService>());

            yield return(describer.Singleton <IFakeSingletonService, FakeService>());

            yield return(describer.Transient <IFakeFallbackService, FakeService>());

            yield return(describer.Transient <IDependOnNonexistentService, DependOnNonexistentService>());

            yield return(describer.Describe(
                             typeof(IFakeOpenGenericService <string>),
                             typeof(FakeService),
                             implementationInstance: null,
                             lifecycle: LifecycleKind.Transient));

            yield return(describer.Describe(
                             typeof(IFakeOpenGenericService <>),
                             typeof(FakeOpenGenericService <>),
                             implementationInstance: null,
                             lifecycle: LifecycleKind.Transient));
        }
        public static IEnumerable<IServiceDescriptor> DefaultServices()
        {
            var describer = new ServiceDescriber();

            yield return describer.Transient<IFakeService, FakeService>();
            yield return describer.Transient<IFakeMultipleService, FakeOneMultipleService>();
            yield return describer.Transient<IFakeMultipleService, FakeTwoMultipleService>();
            yield return describer.Transient<IFakeOuterService, FakeOuterService>();
            yield return describer.Instance<IFakeServiceInstance>(new FakeService() { Message = "Instance" });
            yield return describer.Scoped<IFakeScopedService, FakeService>();
            yield return describer.Singleton<IFakeSingletonService, FakeService>();
            yield return describer.Transient<IFakeFallbackService, FakeService>();
            yield return describer.Transient<IDependOnNonexistentService, DependOnNonexistentService>();
            yield return describer.Describe(
                typeof(IFakeOpenGenericService<string>),
                typeof(FakeService),
                implementationInstance: null,
                lifecycle: LifecycleKind.Transient);
            yield return describer.Describe(
                typeof(IFakeOpenGenericService<>),
                typeof(FakeOpenGenericService<>),
                implementationInstance: null,
                lifecycle: LifecycleKind.Transient);
        }
Beispiel #22
0
        public static IEnumerable <IServiceDescriptor> GetDefaultServices(IConfiguration configuration = null)
        {
            var describe = new ServiceDescriber(configuration);

            //
            // Options and core services.
            //
            yield return(describe.Transient <IConfigureOptions <MvcOptions>, MvcOptionsSetup>());

            yield return(describe.Transient <IConfigureOptions <RazorViewEngineOptions>, RazorViewEngineOptionsSetup>());

            yield return(describe.Transient <IAssemblyProvider, DefaultAssemblyProvider>());

            yield return(describe.Transient(typeof(INestedProviderManager <>), typeof(NestedProviderManager <>)));

            yield return(describe.Transient(typeof(INestedProviderManagerAsync <>), typeof(NestedProviderManagerAsync <>)));

            yield return(describe.Transient <MvcMarkerService, MvcMarkerService>());

            //
            // Core action discovery, filters and action execution.
            //
            // These are consumed only when creating action descriptors, then they can be de-allocated
            yield return(describe.Transient <IControllerModelBuilder, DefaultControllerModelBuilder>());

            yield return(describe.Transient <IActionModelBuilder, DefaultActionModelBuilder>());

            // This accesses per-request services to activate the controller
            yield return(describe.Transient <IControllerFactory, DefaultControllerFactory>());

            // This has a cache, so it needs to be a singleton
            yield return(describe.Singleton <IControllerActivator, DefaultControllerActivator>());

            // This accesses per-reqest services
            yield return(describe.Transient <IActionInvokerFactory, ActionInvokerFactory>());

            // This provider needs access to the per-request services, but might be used many times for a given
            // request.
            yield return(describe.Scoped <INestedProvider <ActionConstraintProviderContext>,
                                          DefaultActionConstraintProvider>());

            yield return(describe.Singleton <IActionSelectorDecisionTreeProvider, ActionSelectorDecisionTreeProvider>());

            yield return(describe.Scoped <IActionSelector, DefaultActionSelector>());

            yield return(describe.Transient <IControllerActionArgumentBinder, DefaultControllerActionArgumentBinder>());

            yield return(describe.Transient <INestedProvider <ActionDescriptorProviderContext>,
                                             ControllerActionDescriptorProvider>());

            yield return(describe.Transient <INestedProvider <ActionInvokerProviderContext>,
                                             ControllerActionInvokerProvider>());

            yield return(describe.Singleton <IActionDescriptorsCollectionProvider,
                                             DefaultActionDescriptorsCollectionProvider>());

            // The IGlobalFilterProvider is used to build the action descriptors (likely once) and so should
            // remain transient to avoid keeping it in memory.
            yield return(describe.Transient <IGlobalFilterProvider, DefaultGlobalFilterProvider>());

            yield return(describe.Transient <INestedProvider <FilterProviderContext>, DefaultFilterProvider>());

            //
            // Dataflow - ModelBinding, Validation and Formatting
            //
            yield return(describe.Transient <IModelMetadataProvider, DataAnnotationsModelMetadataProvider>());

            yield return(describe.Scoped <IActionBindingContextProvider, DefaultActionBindingContextProvider>());

            yield return(describe.Transient <IInputFormatterSelector, DefaultInputFormatterSelector>());

            yield return(describe.Scoped <IInputFormattersProvider, DefaultInputFormattersProvider>());

            yield return(describe.Transient <IModelBinderProvider, DefaultModelBindersProvider>());

            yield return(describe.Scoped <ICompositeModelBinder, CompositeModelBinder>());

            yield return(describe.Transient <IValueProviderFactoryProvider, DefaultValueProviderFactoryProvider>());

            yield return(describe.Scoped <ICompositeValueProviderFactory, CompositeValueProviderFactory>());

            yield return(describe.Transient <IOutputFormattersProvider, DefaultOutputFormattersProvider>());

            yield return(describe.Instance <JsonOutputFormatter>(new JsonOutputFormatter()));

            yield return(describe.Transient <IModelValidatorProviderProvider, DefaultModelValidatorProviderProvider>());

            yield return(describe.Scoped <ICompositeModelValidatorProvider, CompositeModelValidatorProvider>());

            yield return(describe.Transient <IBodyModelValidator, DefaultBodyModelValidator>());

            yield return(describe.Transient <IValidationExcludeFiltersProvider, DefaultValidationExcludeFiltersProvider>());

            //
            // Razor, Views and runtime compilation
            //

            // The provider is inexpensive to initialize and provides ViewEngines that may require request
            // specific services.
            yield return(describe.Scoped <ICompositeViewEngine, CompositeViewEngine>());

            yield return(describe.Transient <IViewEngineProvider, DefaultViewEngineProvider>());

            // Transient since the IViewLocationExpanders returned by the instance is cached by view engines.
            yield return(describe.Transient <IViewLocationExpanderProvider, DefaultViewLocationExpanderProvider>());

            // Caches view locations that are valid for the lifetime of the application.
            yield return(describe.Singleton <IViewLocationCache, DefaultViewLocationCache>());

            yield return(describe.Singleton <IRazorFileSystemCache, DefaultRazorFileSystemCache>());

            // The host is designed to be discarded after consumption and is very inexpensive to initialize.
            yield return(describe.Transient <IMvcRazorHost>(serviceProvider =>
            {
                var cachedFileSystem = serviceProvider.GetRequiredService <IRazorFileSystemCache>();
                return new MvcRazorHost(cachedFileSystem);
            }));

            // Caches compilation artifacts across the lifetime of the application.
            yield return(describe.Singleton <ICompilerCache, CompilerCache>());

            // This caches compilation related details that are valid across the lifetime of the application
            // and is required to be a singleton.
            yield return(describe.Singleton <ICompilationService, RoslynCompilationService>());

            // Both the compiler cache and roslyn compilation service hold on the compilation related
            // caches. RazorCompilation service is just an adapter service, and it is transient to ensure
            // the IMvcRazorHost dependency does not maintain state.
            yield return(describe.Transient <IRazorCompilationService, RazorCompilationService>());

            // The ViewStartProvider needs to be able to consume scoped instances of IRazorPageFactory
            yield return(describe.Scoped <IViewStartProvider, ViewStartProvider>());

            yield return(describe.Transient <IRazorViewFactory, RazorViewFactory>());

            yield return(describe.Singleton <IRazorPageActivator, RazorPageActivator>());

            // Virtual path view factory needs to stay scoped so views can get get scoped services.
            yield return(describe.Scoped <IRazorPageFactory, VirtualPathRazorPageFactory>());

            //
            // View and rendering helpers
            //

            yield return(describe.Transient <IHtmlHelper, HtmlHelper>());

            yield return(describe.Transient(typeof(IHtmlHelper <>), typeof(HtmlHelper <>)));

            yield return(describe.Scoped <IUrlHelper, UrlHelper>());

            // Only want one ITagHelperActivator so it can cache Type activation information. Types won't conflict.
            yield return(describe.Singleton <ITagHelperActivator, DefaultTagHelperActivator>());

            // DefaultHtmlGenerator is pretty much stateless but depends on Scoped services such as IUrlHelper and
            // IActionBindingContextProvider. Therefore it too is scoped.
            yield return(describe.Transient <IHtmlGenerator, DefaultHtmlGenerator>());

            yield return(describe.Transient <IViewComponentSelector, DefaultViewComponentSelector>());

            yield return(describe.Singleton <IViewComponentActivator, DefaultViewComponentActivator>());

            yield return(describe.Transient <IViewComponentInvokerFactory, DefaultViewComponentInvokerFactory>());

            yield return(describe.Transient <INestedProvider <ViewComponentInvokerProviderContext>,
                                             DefaultViewComponentInvokerProvider>());

            yield return(describe.Transient <IViewComponentHelper, DefaultViewComponentHelper>());

            //
            // Security and Authorization
            //

            yield return(describe.Transient <IAuthorizationService, DefaultAuthorizationService>());

            yield return(describe.Singleton <IClaimUidExtractor, DefaultClaimUidExtractor>());

            yield return(describe.Singleton <AntiForgery, AntiForgery>());

            yield return(describe.Singleton <IAntiForgeryAdditionalDataProvider,
                                             DefaultAntiForgeryAdditionalDataProvider>());

            //
            // Api Description
            //

            yield return(describe.Singleton <IApiDescriptionGroupCollectionProvider,
                                             ApiDescriptionGroupCollectionProvider>());

            yield return(describe.Transient <INestedProvider <ApiDescriptionProviderContext>,
                                             DefaultApiDescriptionProvider>());
        }
Beispiel #23
0
        public static IEnumerable <IServiceDescriptor> GetDefaultServices(IConfiguration configuration)
        {
            var describe = new ServiceDescriber(configuration);

            yield return(describe.Transient <IInlineConstraintResolver, DefaultInlineConstraintResolver>());
        }
Beispiel #24
0
        private static IEnumerable<IServiceDescriptor> GetDefaultServices(IConfiguration config)
        {
            var describer = new ServiceDescriber(config);

            yield return describer.Singleton<IWindowManager, MetroWindowManager>();
        }
Beispiel #25
0
        public static IEnumerable <SmartServiceDescriptor> GetServices()
        {
            yield return(ServiceDescriber.Scoped <SwiftyWorkContext, SwiftyWorkContext>());

            yield return(ServiceDescriber.Singleton <IWorkContextProvider, SwiftyWorkContextProvider>(SmartOptions.Append));
        }
Beispiel #26
0
        public static IEnumerable <IServiceDescriptor> GetDefaultServices(IConfiguration configuration)
        {
            var describe = new ServiceDescriber(configuration);

            yield return(describe.Transient <IOptionsSetup <MvcOptions>, MvcOptionsSetup>());

            yield return(describe.Transient <IControllerFactory, DefaultControllerFactory>());

            yield return(describe.Singleton <IControllerActivator, DefaultControllerActivator>());

            yield return(describe.Scoped <IActionSelector, DefaultActionSelector>());

            yield return(describe.Transient <IActionInvokerFactory, ActionInvokerFactory>());

            yield return(describe.Transient <IControllerAssemblyProvider, DefaultControllerAssemblyProvider>());

            yield return(describe.Transient <IActionDiscoveryConventions, DefaultActionDiscoveryConventions>());

            yield return(describe.Instance <IMvcRazorHost>(new MvcRazorHost(typeof(RazorPage).FullName)));

            yield return(describe.Transient <ICompilationService, RoslynCompilationService>());

            yield return(describe.Singleton <IViewEngineProvider, DefaultViewEngineProvider>());

            yield return(describe.Scoped <ICompositeViewEngine, CompositeViewEngine>());

            yield return(describe.Singleton <IRazorCompilationService, RazorCompilationService>());

            yield return(describe.Singleton <IViewStartProvider, ViewStartProvider>());

            yield return(describe.Singleton <IRazorPageActivator, RazorPageActivator>());

            // Virtual path view factory needs to stay scoped so views can get get scoped services.
            yield return(describe.Scoped <IRazorPageFactory, VirtualPathRazorPageFactory>());

            yield return(describe.Singleton <IFileInfoCache, ExpiringFileInfoCache>());

            yield return(describe.Transient <INestedProvider <ActionDescriptorProviderContext>,
                                             ReflectedActionDescriptorProvider>());

            yield return(describe.Transient <INestedProvider <ActionInvokerProviderContext>,
                                             ReflectedActionInvokerProvider>());

            yield return(describe.Singleton <IActionDescriptorsCollectionProvider,
                                             DefaultActionDescriptorsCollectionProvider>());

            yield return(describe.Transient <IModelMetadataProvider, DataAnnotationsModelMetadataProvider>());

            yield return(describe.Scoped <IActionBindingContextProvider, DefaultActionBindingContextProvider>());

            yield return(describe.Transient <IInputFormatter, JsonInputFormatter>());

            yield return(describe.Transient <IInputFormatter, XmlSerializerInputFormatter>());

            yield return(describe.Transient <IInputFormatter, XmlDataContractSerializerInputFormatter>());

            yield return(describe.Transient <IInputFormatterProvider, TempInputFormatterProvider>());

            yield return(describe.Transient <IModelBinderProvider, DefaultModelBindersProvider>());

            yield return(describe.Scoped <ICompositeModelBinder, CompositeModelBinder>());

            yield return(describe.Transient <IValueProviderFactoryProvider, DefaultValueProviderFactoryProvider>());

            yield return(describe.Scoped <ICompositeValueProviderFactory, CompositeValueProviderFactory>());

            yield return(describe.Transient <IOutputFormattersProvider, DefaultOutputFormattersProvider>());

            yield return(describe.Transient <INestedProvider <FilterProviderContext>, DefaultFilterProvider>());

            yield return(describe.Transient <IModelValidatorProvider, DataAnnotationsModelValidatorProvider>());

            yield return(describe.Transient <IModelValidatorProvider, DataMemberModelValidatorProvider>());

            yield return(describe.Scoped <IUrlHelper, UrlHelper>());

            yield return(describe.Transient <IViewComponentSelector, DefaultViewComponentSelector>());

            yield return(describe.Transient <IViewComponentInvokerFactory, DefaultViewComponentInvokerFactory>());

            yield return(describe.Transient <INestedProvider <ViewComponentInvokerProviderContext>,
                                             DefaultViewComponentInvokerProvider>());

            yield return(describe.Transient <IViewComponentHelper, DefaultViewComponentHelper>());

            yield return(describe.Transient <IAuthorizationService, DefaultAuthorizationService>());

            yield return(describe.Singleton <IClaimUidExtractor, DefaultClaimUidExtractor>());

            yield return(describe.Singleton <AntiForgery, AntiForgery>());

            yield return(describe.Singleton <IAntiForgeryAdditionalDataProvider,
                                             DefaultAntiForgeryAdditionalDataProvider>());

            yield return
                (describe.Describe(
                     typeof(INestedProviderManager <>),
                     typeof(NestedProviderManager <>),
                     implementationInstance: null,
                     lifecycle: LifecycleKind.Transient));

            yield return
                (describe.Describe(
                     typeof(INestedProviderManagerAsync <>),
                     typeof(NestedProviderManagerAsync <>),
                     implementationInstance: null,
                     lifecycle: LifecycleKind.Transient));

            yield return(describe.Transient <IHtmlHelper, HtmlHelper>());

            yield return
                (describe.Describe(
                     typeof(IHtmlHelper <>),
                     typeof(HtmlHelper <>),
                     implementationInstance: null,
                     lifecycle: LifecycleKind.Transient));
        }
Beispiel #27
0
        public static IEnumerable <IServiceDescriptor> GetDefaultServices(IConfiguration configuration)
        {
            var describe = new ServiceDescriber(configuration);

            yield return(describe.Transient <IOptionsSetup <MvcOptions>, MvcOptionsSetup>());

            yield return(describe.Transient <IControllerFactory, DefaultControllerFactory>());

            yield return(describe.Singleton <IControllerActivator, DefaultControllerActivator>());

            yield return(describe.Singleton <IActionSelectorDecisionTreeProvider, ActionSelectorDecisionTreeProvider>());

            yield return(describe.Scoped <IActionSelector, DefaultActionSelector>());

            yield return(describe.Transient <IActionInvokerFactory, ActionInvokerFactory>());

            yield return(describe.Transient <IControllerAssemblyProvider, DefaultControllerAssemblyProvider>());

            yield return(describe.Transient <IActionDiscoveryConventions, DefaultActionDiscoveryConventions>());

            // The host is designed to be discarded after consumption and is very inexpensive to initialize.
            yield return(describe.Transient <IMvcRazorHost, MvcRazorHost>());

            yield return(describe.Singleton <ICompilationService, RoslynCompilationService>());

            yield return(describe.Singleton <IRazorCompilationService, RazorCompilationService>());

            yield return(describe.Singleton <IViewEngineProvider, DefaultViewEngineProvider>());

            yield return(describe.Scoped <ICompositeViewEngine, CompositeViewEngine>());

            yield return(describe.Singleton <IViewStartProvider, ViewStartProvider>());

            yield return(describe.Transient <IRazorView, RazorView>());

            yield return(describe.Singleton <IRazorPageActivator, RazorPageActivator>());

            // Virtual path view factory needs to stay scoped so views can get get scoped services.
            yield return(describe.Scoped <IRazorPageFactory, VirtualPathRazorPageFactory>());

            yield return(describe.Singleton <IFileInfoCache, ExpiringFileInfoCache>());

            yield return(describe.Transient <INestedProvider <ActionDescriptorProviderContext>,
                                             ReflectedActionDescriptorProvider>());

            yield return(describe.Transient <INestedProvider <ActionInvokerProviderContext>,
                                             ReflectedActionInvokerProvider>());

            yield return(describe.Singleton <IActionDescriptorsCollectionProvider,
                                             DefaultActionDescriptorsCollectionProvider>());

            yield return(describe.Transient <IModelMetadataProvider, DataAnnotationsModelMetadataProvider>());

            yield return(describe.Scoped <IActionBindingContextProvider, DefaultActionBindingContextProvider>());

            yield return(describe.Transient <IInputFormatterSelector, DefaultInputFormatterSelector>());

            yield return(describe.Scoped <IInputFormattersProvider, DefaultInputFormattersProvider>());

            yield return(describe.Transient <IModelBinderProvider, DefaultModelBindersProvider>());

            yield return(describe.Scoped <ICompositeModelBinder, CompositeModelBinder>());

            yield return(describe.Transient <IValueProviderFactoryProvider, DefaultValueProviderFactoryProvider>());

            yield return(describe.Scoped <ICompositeValueProviderFactory, CompositeValueProviderFactory>());

            yield return(describe.Transient <IOutputFormattersProvider, DefaultOutputFormattersProvider>());

            yield return(describe.Instance <JsonOutputFormatter>(
                             new JsonOutputFormatter(JsonOutputFormatter.CreateDefaultSettings(), indent: false)));

            // The IGlobalFilterProvider is used to build the action descriptors (likely once) and so should
            // remain transient to avoid keeping it in memory.
            yield return(describe.Transient <IGlobalFilterProvider, DefaultGlobalFilterProvider>());

            yield return(describe.Transient <INestedProvider <FilterProviderContext>, DefaultFilterProvider>());

            yield return(describe.Transient <IModelValidatorProviderProvider, DefaultModelValidatorProviderProvider>());

            yield return(describe.Scoped <ICompositeModelValidatorProvider, CompositeModelValidatorProvider>());

            yield return(describe.Scoped <IUrlHelper, UrlHelper>());

            yield return(describe.Transient <IViewComponentSelector, DefaultViewComponentSelector>());

            yield return(describe.Singleton <IViewComponentActivator, DefaultViewComponentActivator>());

            yield return(describe.Transient <IViewComponentInvokerFactory, DefaultViewComponentInvokerFactory>());

            yield return(describe.Transient <INestedProvider <ViewComponentInvokerProviderContext>,
                                             DefaultViewComponentInvokerProvider>());

            yield return(describe.Transient <IViewComponentHelper, DefaultViewComponentHelper>());

            yield return(describe.Transient <IAuthorizationService, DefaultAuthorizationService>());

            yield return(describe.Singleton <IClaimUidExtractor, DefaultClaimUidExtractor>());

            yield return(describe.Singleton <AntiForgery, AntiForgery>());

            yield return(describe.Singleton <IAntiForgeryAdditionalDataProvider,
                                             DefaultAntiForgeryAdditionalDataProvider>());

            yield return
                (describe.Describe(
                     typeof(INestedProviderManager <>),
                     typeof(NestedProviderManager <>),
                     implementationInstance: null,
                     lifecycle: LifecycleKind.Transient));

            yield return
                (describe.Describe(
                     typeof(INestedProviderManagerAsync <>),
                     typeof(NestedProviderManagerAsync <>),
                     implementationInstance: null,
                     lifecycle: LifecycleKind.Transient));

            yield return(describe.Transient <IHtmlHelper, HtmlHelper>());

            yield return
                (describe.Describe(
                     typeof(IHtmlHelper <>),
                     typeof(HtmlHelper <>),
                     implementationInstance: null,
                     lifecycle: LifecycleKind.Transient));

            yield return(describe.Transient <MvcMarkerService, MvcMarkerService>());
        }
Beispiel #28
0
        public static IEnumerable<IServiceDescriptor> GetDefaultServices(IConfiguration configuration)
        {
            var describe = new ServiceDescriber(configuration);

            yield return describe.Transient<IOptionsSetup<MvcOptions>, MvcOptionsSetup>();

            yield return describe.Transient<IControllerFactory, DefaultControllerFactory>();
            yield return describe.Singleton<IControllerActivator, DefaultControllerActivator>();
            yield return describe.Scoped<IActionSelector, DefaultActionSelector>();
            yield return describe.Transient<IActionInvokerFactory, ActionInvokerFactory>();
            yield return describe.Transient<IControllerAssemblyProvider, DefaultControllerAssemblyProvider>();
            yield return describe.Transient<IActionDiscoveryConventions, DefaultActionDiscoveryConventions>();

            yield return describe.Instance<IMvcRazorHost>(new MvcRazorHost(typeof(RazorPage).FullName));

            yield return describe.Transient<ICompilationService, RoslynCompilationService>();

            yield return describe.Singleton<IViewEngineProvider, DefaultViewEngineProvider>();
            yield return describe.Scoped<ICompositeViewEngine, CompositeViewEngine>();
            yield return describe.Singleton<IRazorCompilationService, RazorCompilationService>();
            yield return describe.Singleton<IViewStartProvider, ViewStartProvider>();

            yield return describe.Singleton<IRazorPageActivator, RazorPageActivator>();
            // Virtual path view factory needs to stay scoped so views can get get scoped services.
            yield return describe.Scoped<IRazorPageFactory, VirtualPathRazorPageFactory>();
            yield return describe.Singleton<IFileInfoCache, ExpiringFileInfoCache>();

            yield return describe.Transient<INestedProvider<ActionDescriptorProviderContext>,
                                            ReflectedActionDescriptorProvider>();
            yield return describe.Transient<INestedProvider<ActionInvokerProviderContext>,
                                            ReflectedActionInvokerProvider>();
            yield return describe.Singleton<IActionDescriptorsCollectionProvider,
                DefaultActionDescriptorsCollectionProvider>();

            yield return describe.Transient<IModelMetadataProvider, DataAnnotationsModelMetadataProvider>();
            yield return describe.Scoped<IActionBindingContextProvider, DefaultActionBindingContextProvider>();

            yield return describe.Transient<IInputFormatter, JsonInputFormatter>();
            yield return describe.Transient<IInputFormatter, XmlSerializerInputFormatter>();
            yield return describe.Transient<IInputFormatter, XmlDataContractSerializerInputFormatter>();
            yield return describe.Transient<IInputFormatterProvider, TempInputFormatterProvider>();

            yield return describe.Transient<IModelBinderProvider, DefaultModelBindersProvider>();
            yield return describe.Scoped<ICompositeModelBinder, CompositeModelBinder>();
            yield return describe.Transient<IValueProviderFactoryProvider, DefaultValueProviderFactoryProvider>();
            yield return describe.Scoped<ICompositeValueProviderFactory, CompositeValueProviderFactory>();
            yield return describe.Transient<IOutputFormattersProvider, DefaultOutputFormattersProvider>();

            yield return describe.Transient<INestedProvider<FilterProviderContext>, DefaultFilterProvider>();

            yield return describe.Transient<IModelValidatorProvider, DataAnnotationsModelValidatorProvider>();
            yield return describe.Transient<IModelValidatorProvider, DataMemberModelValidatorProvider>();

            yield return describe.Scoped<IUrlHelper, UrlHelper>();

            yield return describe.Transient<IViewComponentSelector, DefaultViewComponentSelector>();
            yield return describe.Transient<IViewComponentInvokerFactory, DefaultViewComponentInvokerFactory>();
            yield return describe.Transient<INestedProvider<ViewComponentInvokerProviderContext>,
                DefaultViewComponentInvokerProvider>();
            yield return describe.Transient<IViewComponentHelper, DefaultViewComponentHelper>();

            yield return describe.Transient<IAuthorizationService, DefaultAuthorizationService>();
            yield return describe.Singleton<IClaimUidExtractor, DefaultClaimUidExtractor>();
            yield return describe.Singleton<AntiForgery, AntiForgery>();
            yield return describe.Singleton<IAntiForgeryAdditionalDataProvider,
                DefaultAntiForgeryAdditionalDataProvider>();

            yield return
               describe.Describe(
                   typeof(INestedProviderManager<>),
                   typeof(NestedProviderManager<>),
                   implementationInstance: null,
                   lifecycle: LifecycleKind.Transient);

            yield return
                describe.Describe(
                    typeof(INestedProviderManagerAsync<>),
                    typeof(NestedProviderManagerAsync<>),
                    implementationInstance: null,
                    lifecycle: LifecycleKind.Transient);

            yield return describe.Transient<IHtmlHelper, HtmlHelper>();
            yield return
                describe.Describe(
                    typeof(IHtmlHelper<>),
                    typeof(HtmlHelper<>),
                    implementationInstance: null,
                    lifecycle: LifecycleKind.Transient);
        }
Beispiel #29
0
        private static IEnumerable <IServiceDescriptor> GetDefaultServices(IConfiguration config)
        {
            var describer = new ServiceDescriber(config);

            yield return(describer.Singleton <IWindowManager, MetroWindowManager>());
        }
 public ServiceCollection(IConfiguration configuration)
 {
     _descriptors = new List<IServiceDescriptor>();
     _describe = new ServiceDescriber(configuration);
 }