Update README.md
0eb9862bf8cb67077ac28fd893846e575bcf2b0e
1 files changed
SessionScoped/README.md
diff --git a/SessionScoped/README.md b/SessionScoped/README.md
index f654c7e..0dfa92e 100644
--- a/SessionScoped/README.md
+++ b/SessionScoped/README.md
@@ -1 +1,120 @@
-###
\ No newline at end of file
+# SessionScoped
+
+A lightweight extension for managing session-scoped data in ASP.NET Core applications.
+
+## Overview
+
+SessionScoped simplifies session management by providing scoped data storage tied to the user's session. It integrates seamlessly with ASP.NET Core's dependency injection, making session-based state management easy and robust.
+
+## Features
+
+- Scoped data tied to the user's session.
+- Fully compatible with ASP.NET Core dependency injection.
+- Minimal setup required.
+
+## Getting Started
+
+1. **Configure AddSessionScoped**
+
+Register the session and `SessionScoped` in your `Startup.cs` or `Program.cs` file:
+
+```csharp
+using SessionScopedTest.Services;
+
+var builder = WebApplication.CreateBuilder(new WebApplicationOptions
+{
+ ContentRootPath = AppContext.BaseDirectory
+});
+
+var services = builder.Services;
+
+services.AddHttpContextAccessor();
+services.AddMvc();
+
+services.AddDistributedMemoryCache();
+services.AddSession(options =>
+{
+ options.IdleTimeout = TimeSpan.FromMinutes(20);
+ options.Cookie.Name = ".AspNetCore.Session";
+ options.Cookie.HttpOnly = true;
+ options.Cookie.IsEssential = true;
+});
+
+services.AddSessionScoped<ExampleService>();
+
+var app = builder.Build();
+
+app.UseDefaultFiles();
+app.UseStaticFiles();
+app.UseSession();
+app.MapDefaultControllerRoute();
+
+app.Run();
+```
+
+2. **Create a Service implementing IHostedService interface**
+
+```csharp
+public class ExampleService(ILoggerFactory loggerFactory) : IHostedService
+{
+ private readonly ILogger Logger = loggerFactory.CreateLogger<ExampleService>();
+
+ public async Task<int> CalcAsync(int a, int b)
+ {
+ Logger.LogInformation("CalcAsync {a} x {b}", a , b);
+
+ await Task.Delay(100);
+
+ return a * b;
+ }
+
+ public async Task StartAsync(CancellationToken cancellationToken)
+ {
+ Logger.LogWarning("StartAsync");
+
+ await Task.Delay(100);
+ }
+
+ public async Task StopAsync(CancellationToken cancellationToken)
+ {
+ Logger.LogWarning("StopAsync");
+
+ await Task.Delay(100);
+ }
+}
+```
+
+3. **Use SessionScopedFactory<T>**
+
+Inject `SessionScopedFactory<ExampleService> factory` into your services or controllers to manage session-scoped data:
+
+```csharp
+public class ExampleController(SessionScopedFactory<ExampleService> factory) : ControllerBase
+{
+ public async Task<IActionResult> Index()
+ {
+ HttpContext.Session.SetString("Started", DateTime.Now.ToString());
+
+ var result = await factory.Instance.CalcAsync(123, 456);
+
+ return Ok(result);
+ }
+}
+```
+
+## Requirements
+
+- .NET 9 or higher
+- ASP.NET Core
+
+## Contributing
+
+Contributions are welcome! Feel free to fork the repository and submit a pull request.
+
+## License
+
+This project is licensed under the MIT License. See the [LICENSE](https://github.com/alphons/SessionScopedExtension/blob/master/LICENSE) file for details.
+
+---
+
+For more details, visit the [GitHub repository](https://github.com/alphons/SessionScopedExtension/tree/master/SessionScoped).