AgileLabs.Net-上手篇

91 阅读1分钟

AgileLabs其实有很多默认的约束, 要看自己的场景是否覆盖, 这些场景我也会尽可能的写明白让大家能清楚的理解.

首先微软能帮我们做的已经做的很好了, 那我们为何还要封装呢? 严格意义上来讲是根据自己所在的业务场景, 进一步的抽象, 共享到不同的项目

目前这套框架至少是用在了5套不同的项目中

开始创建项目

1. 创建一个ASP.NET Core Web应用(MVC)

2. 选择8.0的模板, https/顶级语句看自己喜好

3. 创建中...

4. 创建后的项目文件

5. 在solution文件同级目录增加nuget.config

内容如下, 在官方的基础上增加了nuget.feinian.net, 这是目前agilelabs.net的nuget包存放位置, 截至目前agilelabs还未在nuget官方源中发布

<?xml version="1.0" encoding="utf-8"?><configuration>  <packageSources>    <clear />    <add key="Feinian Nuget" value="https://nuget.feinian.net/v3/index.json" />    <add key="NuGet v3" value="https://api.nuget.org/v3/index.json" />  </packageSources></configuration>

添加后的文件夹截图如下

6. 项目中引用nuget包

接受协议

7. 修改Program.cs如下

代码

using AgileLabs.WebApp.Hosting;using AgileLabs.WebApp;using Microsoft.AspNetCore.Mvc;AgileLabApplication.StartApplication<DefaultMvcApplicationOptions>(opts =>{    // 解决views打开报错的问题, 详见下面的错误解释部分    //opts.MvcBuilderCreateFunc = (IServiceCollection serviceCollection, Action<MvcOptions> action) => serviceCollection.AddControllersWithViews(action);});

8. 启动后的日志

下面也是安全启动的一部分

其他问题

1. 错误: ComponentNotRegisteredException: The requested service 'Microsoft.AspNetCore.Mvc.ViewFeatures.ITempDataDictionaryFactory' has not been registered. To avoid this exception, either register a component to provide the service, check for service registration using IsRegistered(), or use the ResolveOptional() method to resolve an optional dependency.

默认情况下agilelabs以最小方式运行, 只支持webapi, 不支持mvc, 所以需要重写MvcBuilderCreateFunc, 增加AddControllerWithViews

AgileLabApplication.StartApplication<DefaultMvcApplicationOptions>(opts =>
{
    opts.MvcBuilderCreateFunc = (IServiceCollection serviceCollection, Action<MvcOptions> action) => serviceCollection.AddControllersWithViews(action);
});

2. 静态资源没有加载的问题处理

默认不支持StaticFiles, 需要通过扩展IRequestPiplineRegister接口增加UseStaticFiles的注册

namespace AgileLabs.SampleWeb
{
    public class RequestPipline : IRequestPiplineRegister
    {
        public RequestPiplineCollection Configure(RequestPiplineCollection piplineActions, AppBuildContext buildContext)
        {
            piplineActions.Register("UseStaticFiles", RequestPiplineStage.BeforeRouting, app => app.UseStaticFiles());
            return piplineActions;
        }
    }
}