Exemple #1
0
        internal static IHostBuilder UseWebHostJimu(this IHostBuilder hostBuilder, ApplicationClientBuilder jimuAppBuilder, Action <IServiceCollection> servicesAction = null, Action <WebHostBuilderContext, IApplicationBuilder> appAction = null, Action <IMvcBuilder> mvcAction = null, Action <IWebHostBuilder> webBuilderAction = null)
        {
            IApplication jimuApp = null;

            jimuAppBuilder.AddBeforeBuilder(cb =>
            {
                hostBuilder.ConfigureWebHostDefaults(web =>
                {
                    var type       = typeof(ClientWebModuleBase);
                    var webModules = AppDomain.CurrentDomain.GetAssemblies()
                                     .SelectMany(x => x.GetTypes())
                                     .Where(x => x.IsClass && type.IsAssignableFrom(x) && !x.IsAbstract)
                                     .Select(x => Activator.CreateInstance(x, jimuAppBuilder.JimuAppSettings) as ClientWebModuleBase)
                                     .OrderBy(x => x.Priority);

                    foreach (var configure in webModules)
                    {
                        configure.DoWebHostBuilder(web);
                    }

                    webBuilderAction?.Invoke(web);


                    web
                    .ConfigureServices(services =>
                    {
                        services.AddControllersWithViews();
                        servicesAction?.Invoke(services);
                        var mvcBuilder = services.AddJimu(jimuAppBuilder.JimuAppSettings);
                        mvcAction?.Invoke(mvcBuilder);
                        cb.Populate(services);
                    })
                    .Configure((context, app) =>
                    {
                        if (context.HostingEnvironment.IsDevelopment())
                        {
                            app.UseDeveloperExceptionPage();
                        }
                        app.UseRouting();
                        app.UseAuthorization();
                        app.UseEndpoints(endpoints =>
                        {
                            endpoints.MapRazorPages();
                            endpoints.MapControllers();
                        });

                        appAction?.Invoke(context, app);
                        app.UseJimu(jimuApp);

                        jimuApp.Run();
                        JimuClient.Host = jimuApp;
                    });
                });
            });

            jimuApp = jimuAppBuilder.Build();

            return(hostBuilder);
        }
Exemple #2
0
        public void Run(string clientSettingName = "JimuAppClientSettings", string serverSettingName = "JimuAppServerSettings")
        {
            IHostBuilder thisHostBuilder = null;

            ApplicationHostServer.Instance.BuildHost((hostBuilder, container) =>
            {
                thisHostBuilder = hostBuilder;
            }).BuildServer(builder =>
            {
                _serverBuilderAction?.Invoke(builder);
                IApplication hostClient = null;
                builder.AddServiceModule(x =>
                {
                    x.Register(c => hostClient.Container.Resolve <IServiceProxy>()).As <IServiceProxy>();
                }).AddRunner(x =>
                {
                    var clientBuilder = new ApplicationClientBuilder(new ContainerBuilder(), clientSettingName);
                    _clientBuilderAction?.Invoke(clientBuilder);
                    hostClient = clientBuilder.Build();
                    hostClient.RunInServer(thisHostBuilder);
                });
            }).Run(serverSettingName);
        }
Exemple #3
0
        static void Main(string[] args)
        {
            Console.WriteLine("Hello World, Service2 start...");

            var          hostClientBuilder = new ApplicationClientBuilder(new Autofac.ContainerBuilder());
            IApplication hostClient        = null;

            var hostServerBuilder = new ApplicationServerBuilder(new Autofac.ContainerBuilder());

            hostServerBuilder.AddServiceModule(x =>
            {
                x.Register(c => hostClient.Container.Resolve <IServiceProxy>()).As <IServiceProxy>();
            });
            var hostServer = hostServerBuilder.Build();

            hostServer.RunAction(x =>
            {
                hostClient = hostClientBuilder.Build();
                hostClient.Run();
            });

            hostServer.Run();
            Console.ReadLine();
        }