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); }
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); }
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(); }