예제 #1
0
        /// <summary>
        ///     配置使用MessageMVC
        /// </summary>
        /// <param name="builder">主机生成器</param>
        /// <param name="registAction">配置注册方法</param>
        /// <param name="autoDiscovery">自动发现</param>
        /// <param name="discovery">自定义API发现方法</param>
        internal static void UseMessageMVC(this IHostBuilder builder, Action <IServiceCollection> registAction, bool autoDiscovery, Action discovery)
        {
            Console.Write(@"-------------------------------------------------------------
---------------> ");
            Console.ForegroundColor = ConsoleColor.Green;
            Console.Write(@"Wecome ZeroTeam MessageMVC");
            Console.ResetColor();
            Console.WriteLine(@" <----------------
-------------------------------------------------------------");
            builder.ConfigureAppConfiguration((ctx, builder) =>
            {
                DependencyHelper.ServiceCollection.AddSingleton(p => builder);
                ConfigurationHelper.BindBuilder(builder);
                ZeroFlowControl.LoadConfig();
                ZeroAppOption.Instance.AutoDiscover       = autoDiscovery;
                ZeroAppOption.Instance.Discovery          = discovery;
                ConfigurationHelper.OnConfigurationUpdate = cfg => ctx.Configuration = cfg;
                ctx.Configuration = ConfigurationHelper.Root;
            })
            .ConfigureServices((ctx, services) =>
            {
                DependencyHelper.Binding(services);
                services.AddHostedService <ZeroHostedService>();
                registAction(services);
                AddDependency(services);
            });
        }
예제 #2
0
        /// <summary>
        /// 检查并注入配置
        /// </summary>
        internal static void AddDependency(IServiceCollection services)
        {
            ZeroFlowControl.LoadAddIn();
            //IZeroContext构造
            services.AddSingleton <IZeroOption>(pri => MessagePostOption.Instance);
            services.TryAddTransient <IUser, UserInfo>();
            services.TryAddTransient <IZeroContext, ZeroContext>();
            //消息发送
            services.AddTransient <IFlowMiddleware, MessagePoster>();
            //API路由与执行
            services.AddTransient <IMessageMiddleware, ApiExecuter>();
            //消息格式
            services.AddTransient <IInlineMessage, InlineMessage>();
            services.AddTransient <IMessageResult, MessageResult>();

            //序列化工具
            if (ZeroAppOption.Instance.UsMsJson)
            {
                services.TryAddTransient <ISerializeProxy, JsonSerializeProxy>();
                services.TryAddTransient <IJsonSerializeProxy, JsonSerializeProxy>();
                services.TryAddTransient <IXmlSerializeProxy, XmlSerializeProxy>();
            }
            else
            {
                services.TryAddTransient <ISerializeProxy, NewtonJsonSerializeProxy>();
                services.TryAddTransient <IJsonSerializeProxy, NewtonJsonSerializeProxy>();
                services.TryAddTransient <IXmlSerializeProxy, XmlSerializeProxy>();
            }
            DependencyHelper.Flush();
        }
예제 #3
0
        /// <summary>
        /// 启动主流程控制器,发现指定程序集的Api,适用于测试的场景
        /// </summary>
        /// <param name="services">依赖服务</param>
        /// <param name="assembly">需要发现服务的程序集</param>
        public static async Task UseTest(this IServiceCollection services, Assembly assembly = null)
        {
            if (Interlocked.Increment(ref isInitialized) != 1)
            {
                return;
            }
            services.TryAddTransient <IServiceReceiver, EmptyReceiver>();
            services.TryAddTransient <IMessageConsumer, EmptyReceiver>();
            services.TryAddTransient <INetEvent, EmptyReceiver>();
            AddDependency(services);
            //ZeroFlowControl.Check();
            //ZeroFlowControl.Discove(assembly);
            //ZeroFlowControl.Check();
            //if (assembly != null)
            //    ZeroFlowControl.Discove(assembly);
            await ZeroFlowControl.Initialize();

            await ZeroFlowControl.RunAsync();
        }
예제 #4
0
        async Task IHostedService.StartAsync(CancellationToken cancellationToken)
        {
            _tokenSource = new CancellationTokenSource();
            _appLifetime.ApplicationStarted.Register(() => ZeroFlowControl.OnStarted(_tokenSource));
            _appLifetime.ApplicationStopping.Register(() => ZeroFlowControl.OnStopping(_tokenSource));

            ZeroFlowControl.Logger = _logger;
            await ZeroFlowControl.CheckConfig();

            if (ZeroAppOption.Instance.AutoDiscover)
            {
                ZeroFlowControl.Discove();
            }
            ZeroAppOption.Instance.Discovery?.Invoke();

            ZeroFlowControl.Discove();
            await ZeroFlowControl.Initialize();

            await ZeroFlowControl.RunAsync();
        }
예제 #5
0
 Task IHostedService.StopAsync(CancellationToken cancellationToken)
 {
     return(ZeroFlowControl.Shutdown());
 }