Skip to content
.NET 开发者指北.NET 开发者指北
CMS
.NET指北
FreeKit
Docker
关于
博客
github icon
    • FreeKit 指北
      • FreeKit 基础包
        • FreeKit Extras 扩展包
          • AspNetCore Identity FreeSql的实现
            • Email 邮件
              • Modularity 模块化
                • 单体模块化
                • Localization 本地化

                Modularity 模块化

                calendar icon2022年6月2日timer icon小于 1 分钟word icon约 243 字

                此页内容
                • 单体模块化

                # Modularity 模块化

                # 单体模块化

                • https://github.com/thinktecture-labs/aspnetcore-modular-monolith

                因为类名如 Autofac 和 aspnetcore 中的类相同,将类名修改成如下名称

                • Module.cs-->ModuleInfo.cs
                • IStartup.cs-->IModuleStartup.cs

                创建一个类库名 Module1,并引用 AspNetCore 包

                   <ItemGroup>
                		<FrameworkReference Include="Microsoft.AspNetCore.App" />
                   </ItemGroup>
                
                1
                2
                3

                集成接口,可在ConfigureServices中注入任何服务,在Configure方法中注入中间件

                public class Module1Startup : IModuleStartup
                {
                    public void ConfigureServices(IServiceCollection services)
                    {
                        //services.AddSingleton<ITestService, TestService>();
                    }
                
                    public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
                    {
                        app.UseEndpoints(endpoints =>
                            endpoints.MapGet("/TestEndpoint",
                                async context =>
                                {
                                    await context.Response.WriteAsync("Hello World from TestEndpoint in Module 1");
                                }).RequireAuthorization()
                        );
                    }
                }
                
                1
                2
                3
                4
                5
                6
                7
                8
                9
                10
                11
                12
                13
                14
                15
                16
                17
                18

                使用控制器

                using Microsoft.AspNetCore.Mvc;
                
                [Route("[module]/[controller]")]
                public class TestController : Controller
                {
                    [HttpGet]
                    public ActionResult<string> Index()
                    {
                        return "Hello World from TestController in Module 1";
                    }
                
                    /// <summary>
                    /// InterModule
                    /// </summary>
                    /// <returns></returns>
                    [HttpGet("InterModule")]
                    public ActionResult<string> InterModule()
                    {
                        return $"{0} in TestController in Module 1";
                    }
                }
                
                1
                2
                3
                4
                5
                6
                7
                8
                9
                10
                11
                12
                13
                14
                15
                16
                17
                18
                19
                20
                21
                • 主程序Program
                // Register a convention allowing to us to prefix routes to modules.
                builder.Services.AddTransient<IPostConfigureOptions<MvcOptions>, ModuleRoutingMvcOptionsPostConfigure>();
                
                // Adds module1 with the route prefix module-1
                builder.Services.AddModule<Module1.Module1Startup>("module-1");
                
                // Adds module2 with the route prefix module-2
                builder.Services.AddModule<Module2.Module2Startup>("module-2");
                
                1
                2
                3
                4
                5
                6
                7
                8
                • 注入中间件
                // Adds endpoints defined in modules
                var modules = app.Services.GetRequiredService<IEnumerable<ModuleInfo>>();
                foreach (var module in modules)
                {
                    app.Map($"/{module.RoutePrefix}", builder =>
                    {
                        builder.UseRouting();
                        module.Startup.Configure(builder, app.Environment);
                    });
                }
                
                
                1
                2
                3
                4
                5
                6
                7
                8
                9
                10
                11
                edit icon在 GitHub 上编辑此页open in new window
                上次编辑于: 2022/6/2 18:18:50
                贡献者: igeekfan
                上一页
                Email 邮件
                下一页
                Localization 本地化
                MIT Licensed | Copyright © 2021-present luoyunchong
                苏ICP备16046457号-1

                该应用可以安装在你的 PC 或移动设备上。这将使该 Web 应用程序外观和行为与其他应用程序相同。它将在出现在应用程序列表中,并可以固定到主屏幕,开始菜单或任务栏。此 Web 应用程序还将能够与其他应用程序和你的操作系统安全地进行交互。

                详情