Skip to content

Commit

Permalink
🥳 Adjust project structure.
Browse files Browse the repository at this point in the history
  • Loading branch information
MonkSoul committed Oct 7, 2020
1 parent 9666611 commit 92d245a
Show file tree
Hide file tree
Showing 10 changed files with 83 additions and 54 deletions.
2 changes: 2 additions & 0 deletions framework/Fur.Web.Core/Fur.Web.Core.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,8 @@
</ItemGroup>

<ItemGroup>
<ProjectReference Include="..\Fur.Application\Fur.Application.csproj" />
<ProjectReference Include="..\Fur.Database.Migrations\Fur.Database.Migrations.csproj" />
<ProjectReference Include="..\Fur.EntityFramework.Core\Fur.EntityFramework.Core.csproj" />
</ItemGroup>

Expand Down
27 changes: 27 additions & 0 deletions framework/Fur.Web.Core/FurWebCoreStartup.cs
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
using Fur.UnifyResult;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;

namespace Fur.Web.Core
{
Expand All @@ -17,5 +20,29 @@ public void ConfigureServices(IServiceCollection services)
.AddFriendlyException()
.AddUnifyResult<RESTfulResult, RESTfulResultProvider>();
}

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}

app.UseHttpsRedirection();

app.UseRouting();

app.UseCorsAccessor();

app.UseAuthentication();
app.UseAuthorization();

app.UseSpecificationDocuments();

app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
});
}
}
}
2 changes: 0 additions & 2 deletions framework/Fur.Web.Entry/Fur.Web.Entry.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,6 @@
</ItemGroup>

<ItemGroup>
<ProjectReference Include="..\Fur.Application\Fur.Application.csproj" />
<ProjectReference Include="..\Fur.Database.Migrations\Fur.Database.Migrations.csproj" />
<ProjectReference Include="..\Fur.Web.Core\Fur.Web.Core.csproj" />
</ItemGroup>

Expand Down
29 changes: 0 additions & 29 deletions framework/Fur.Web.Entry/Startup.cs
Original file line number Diff line number Diff line change
@@ -1,46 +1,17 @@
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;

namespace Fur.Web.Entry
{
public class Startup
{
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}

public IConfiguration Configuration { get; }

public void ConfigureServices(IServiceCollection services)
{
}

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}

app.UseHttpsRedirection();

app.UseRouting();

app.UseCorsAccessor();

app.UseAuthentication();
app.UseAuthorization();

app.UseSpecificationDocuments();

app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
});
}
}
}
2 changes: 1 addition & 1 deletion framework/Fur.Web.Entry/wwwroot/README.md
Original file line number Diff line number Diff line change
@@ -1 +1 @@
`Fur``.NET 5` 平台下极易入门、极速开发的 Web 应用框架。
`Fur``.NET 5` 平台下极易入门、极速开发的 `Web` 应用框架。
8 changes: 8 additions & 0 deletions framework/Fur/App/App.cs
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@
using Microsoft.Extensions.Options;
using StackExchange.Profiling;
using System;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
Expand Down Expand Up @@ -99,6 +100,11 @@ public static AppSettingsOptions Settings
/// </summary>
internal static IServiceCollection InternalServices;

/// <summary>
/// 应用所有启动配置对象
/// </summary>
internal static ConcurrentBag<AppStartup> Startups;

/// <summary>
/// 构造函数
/// </summary>
Expand All @@ -107,6 +113,8 @@ static App()
Assemblies = GetAssemblies();
CanBeScanTypes = Assemblies.SelectMany(u => u.GetTypes()
.Where(u => u.IsPublic && !u.IsDefined(typeof(SkipScanAttribute), false)));

Startups = new ConcurrentBag<AppStartup>();
}

/// <summary>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -87,6 +87,9 @@ internal static IServiceCollection AddStartup(this IServiceCollection services,
// 注册自定义 starup
foreach (var type in startups)
{
var startup = Activator.CreateInstance(type) as AppStartup;
App.Startups.Add(startup);

// 获取所有符合依赖注入格式的方法,如返回值void,且第一个参数是 IServiceCollection 类型
var serviceMethods = type.GetMethods(BindingFlags.Public | BindingFlags.Instance)
.Where(u => u.ReturnType == typeof(void)
Expand All @@ -95,7 +98,6 @@ internal static IServiceCollection AddStartup(this IServiceCollection services,

if (!serviceMethods.Any()) continue;

var startup = Activator.CreateInstance(type) as AppStartup;
// 自动安装属性调用
foreach (var method in serviceMethods)
{
Expand Down
41 changes: 38 additions & 3 deletions framework/Fur/App/Filters/StartupFilter.cs
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,10 @@
using Fur.DependencyInjection;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.DependencyInjection;
using System;
using System.Linq;
using System.Reflection;

namespace Fur
{
Expand Down Expand Up @@ -56,13 +59,45 @@ public Action<IApplicationBuilder> Configure(Action<IApplicationBuilder> next)
// 调用默认中间件
app.UseApp();
// 获取环境和配置
//var env = applicationServices.GetRequiredService<IWebHostEnvironment>();
//var config = applicationServices.GetRequiredService<IConfiguration>();
UseStartup(app, applicationServices);
// 调用 Fur.Web.Entry 中的 Startup
next(app);
};
}

/// <summary>
/// 配置 Startup 的 Configure
/// </summary>
/// <param name="app">应用构建器</param>
/// <param name="applicationServices">服务提供器</param>
private static void UseStartup(IApplicationBuilder app, IServiceProvider applicationServices)
{
var startups = App.Startups;
if (!startups.Any()) return;

// 获取环境和配置
var env = applicationServices.GetRequiredService<IWebHostEnvironment>();

foreach (var startup in startups)
{
var type = startup.GetType();

// 获取所有符合依赖注入格式的方法,如返回值void,且第一个参数是 IApplicationBuilder 类型,第二个参数是 IWebHostEnvironment
var configureMethods = type.GetMethods(BindingFlags.Public | BindingFlags.Instance)
.Where(u => u.ReturnType == typeof(void)
&& u.GetParameters().Length > 1
&& u.GetParameters()[0].ParameterType == typeof(IApplicationBuilder)
&& u.GetParameters()[1].ParameterType == typeof(IWebHostEnvironment));

if (!configureMethods.Any()) continue;

// 自动安装属性调用
foreach (var method in configureMethods)
{
method.Invoke(startup, new object[] { app, env });
}
}
}
}
}
22 changes: 4 additions & 18 deletions handbook/docs/get-start.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -95,7 +95,7 @@ using Microsoft.EntityFrameworkCore;

namespace Fur.EntityFramework.Core
{
[AppDbContext("DbConnectionString")] // 配置连接字符串
[AppDbContext("Data Source=./Fur.db")] // 配置连接字符串
public class FurDbContext : AppDbContext<FurDbContext> // 继承 AppDbContext<> 类
{
/// <summary>
Expand All @@ -109,24 +109,11 @@ namespace Fur.EntityFramework.Core
}
```

### 2.2.3 配置数据库连接字符串

`Fur.EntityFramework.Core``dbsettings.json` 中配置数据库连接字符串,代码如下:

```json {2-4} title="Fur\framework\Fur.EntityFramework.Core\dbsettings.json"
{
"ConnectionStrings": {
"DbConnectionString": "Server=localhost;Database=Fur;User=sa;Password=000000;MultipleActiveResultSets=True;",
"Sqlite3ConnectionString": "Data Source=./Fur.db"
}
}
```

### 2.2.4 配置数据库上下文
### 2.2.3 配置数据库上下文

`Fur.EntityFramework.Core``FurEntityFrameworkCoreStartup` 中配置数据库上下文,代码如下:

```cs {12-14} title="Fur\framework\Fur.EntityFramework.Core\FurEntityFrameworkCoreStartup.cs"
```cs {11-14} title="Fur\framework\Fur.EntityFramework.Core\FurEntityFrameworkCoreStartup.cs"
using Fur.DatabaseAccessor;
using Microsoft.Extensions.DependencyInjection;

Expand All @@ -137,7 +124,6 @@ namespace Fur.EntityFramework.Core
{
public void ConfigureServices(IServiceCollection services)
{
// 配置数据库上下文,支持N个数据库
services.AddDatabaseAccessor(options =>
{
options.AddDbPool<FurDbContext>(DbProvider.Sqlite);
Expand All @@ -155,7 +141,7 @@ namespace Fur.EntityFramework.Core

:::

### 2.2.5 通过命令创建数据库表
### 2.2.4 通过命令创建数据库表

打开 `程序包管理控制台`,如下图所示:

Expand Down

0 comments on commit 92d245a

Please sign in to comment.