```csharp
// homecontroller.cs
public class HomeController : Controller
{
readonly ILogger<HomeController> _logger; //field
public HomeController(ILogger<HomeController> logger)
{
_logger = logger;
}
public IActionResult Index()
{
_logger.LogInformation("Home.Index...");
return View();
}
}
//=========================
// homecontroller.cs
public IActionResult Index()
{
_logger.LogCritical("Log Message - Critical");
_logger.LogError("Log Message - Error");
_logger.LogWarning("Log Message - Warning");
_logger.LogInformation("Log Message - Information");
_logger.LogDebug("Log Message - Debug");
_logger.LogTrace("Log Message - Trace");
return View();
}
//=====================
// homecontroller.cs
public IActionResult Index()
{
//Console.WriteLine($"{DateTime.Now:yyyyMMdd-hh:mm:ss}");
_logger.LogCritical("Log Message - Critical:{path} - {time:yyyyMMdd-hh:mm:ss}",
Request.Path, DateTime.Now);
_logger.LogError("Log Message - Error:{path}", Request.Path);
_logger.LogWarning("Log Message - Warning:{path}", Request.Path);
_logger.LogInformation("Log Message - Information:{path}", Request.Path);
_logger.LogDebug("Log Message - Debug:{path}", Request.Path);
_logger.LogTrace("Log Message - Trace:{path}", Request.Path);
return View();
}
//==================================
// MyLogEvents.cs
public class MyLogEvents
{
public const int FormatError = 1000;
public const int ArgumentNullError = 1001;
public const int OverflowError = 1002;
}
// homecontroller.cs
[HttpPost]
public IActionResult Index(string number)
{
try
{
int i = int.Parse(number);
ViewBag.Message = $"Result: {i * i}";
}
catch (ArgumentNullException ex)
{
_logger.LogWarning(MyLogEvents.ArgumentNullError, ex, "Path:{path}", Request.Path);
ViewBag.Message = "沒有輸入值";
}
catch (OverflowException ex)
{
_logger.LogWarning(MyLogEvents.OverflowError, ex, "Path:{path}", Request.Path);
ViewBag.Message = "超過數值範圍";
}
catch (FormatException ex)
{
_logger.LogWarning(MyLogEvents.FormatError, ex, "Path:{path}", Request.Path);
ViewBag.Message = "請輸入數字";
}
return View();
}
// home/index.cshtml
<h1>Home</h1>
<form method="post">
<input type="text" name="number" />
<input type="submit" value="double" />
</form>
<span>@ViewBag.Message</span>
//=====================
// program.cs
builder.Logging.AddFilter((category, level) => category == "MyLog");
//=====================
// IMyService.cs
public interface IMyService
{
Guid Id { get; }
}
public class MyService : IMyService
{
//public Guid Id => Guid.NewGuid();
public Guid Id { get; }=Guid.NewGuid();
}
// democontroller.cs
public class DemoController : Controller
{
public IActionResult Index()
{
MyService service = new MyService();
Console.WriteLine(service.Id);
Console.WriteLine(service.Id);
return View();
}
}
//================================
// DemoController.cs
public class DemoController : Controller
{
readonly IMyService _myService;
public DemoController(IMyService myService)
{
_myService = myService;
}
public IActionResult Index()
{
ViewData["id"]=_myService.Id;
return View();
}
}
// Demo/index.cshtml
@inject Mod14.IMyService Service
@{
ViewData["Title"] = "Demo";
}
<h1>Demo</h1>
<ul>
<li>Controller: @ViewData["id"]</li>
<li>View: @Service.Id</li>
</ul>
// program.cs
using Mod14;
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddControllersWithViews();
//builder.Services.AddTransient<IMyService, MyService>();
//builder.Services.AddScoped<IMyService, MyService>();
builder.Services.AddSingleton<IMyService, MyService>();
var app = builder.Build();
app.UseStaticFiles();
app.MapDefaultControllerRoute();
app.Run();
//=====================
// program.cs
//IMyService myService= new MyService();
//Console.WriteLine(myService.Id);
//builder.Services.AddSingleton(myService);
MyService myService = new MyService();
Console.WriteLine(myService.Id);
builder.Services.AddSingleton<IMyService>(myService);
//============================
// imyservice.cs
public class MyService : IMyService, IDisposable
{
//public Guid Id => Guid.NewGuid();
public Guid Id { get; }=Guid.NewGuid();
public void Dispose()
{
Console.WriteLine(nameof(Dispose));
}
}
// program.cs
//IMyService myService = new MyService();
//Console.WriteLine(myService.Id);
//builder.Services.AddSingleton(myService);
using MyService myService = new MyService();
Console.WriteLine(myService.Id);
builder.Services.AddSingleton<IMyService>(myService);
//=================================
// program.cs
var p1 = builder.Environment.ContentRootFileProvider;
builder.Services.AddSingleton(p1);
// demo2controller.cs
public class Demo2Controller : Controller
{
readonly IFileProvider _provider;
public Demo2Controller(IFileProvider provider)
{
_provider = provider;
}
public IActionResult Index()
{
var contents = _provider.GetDirectoryContents("");
return View(contents);
}
}
// demo2/index.cshtml
@using Microsoft.Extensions.FileProviders
@model IDirectoryContents
@{
ViewData["Title"] = "Demo2";
}
<h1>Demo2</h1>
<ul>
@foreach (var item in Model)
{
<li>@item.Name: @item.IsDirectory</li>
}
</ul>
//=====================================
// demo2controller.cs
public IActionResult Select(string name)
{
var contents = _provider.GetDirectoryContents("");
var file = _provider.GetFileInfo(name);
using var reader = new StreamReader(file.CreateReadStream());
ViewData["result"] = reader.ReadToEnd();
return View(nameof(Index), contents);
}
// demo2/index.cshtml
@using Microsoft.Extensions.FileProviders
@model IDirectoryContents
@{
ViewData["Title"] = "Demo2";
}
<h1>Demo2</h1>
<ul>
@foreach (var item in Model)
{
if (item.IsDirectory)
{
<li>@item.Name</li>
}
else
{
<li><a href="~/demo2/select?name=@item.Name">@item.Name</a></li>
}
}
</ul>
<hr />
<pre>
@ViewData["result"]
</pre>
//=====================================
// .csproj
<ItemGroup>
<PackageReference Include="Microsoft.Extensions.FileProviders.Embedded" Version="6.0.16" />
<PackageReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" Version="6.0.16" />
</ItemGroup>
// program.cs
var p1 = builder.Environment.ContentRootFileProvider;
//builder.Services.AddSingleton(p1);
var p2 = new EmbeddedFileProvider(typeof(Program).Assembly);
builder.Services.AddSingleton<IFileProvider>(p2);
//======================================
// program.cs
var p1 = builder.Environment.ContentRootFileProvider;
//builder.Services.AddSingleton(p1);
var p2 = new EmbeddedFileProvider(typeof(Program).Assembly);
//builder.Services.AddSingleton<IFileProvider>(p2);
var p3=new CompositeFileProvider(p1, p2);
builder.Services.AddSingleton<IFileProvider>(p3);
```