ब्लॉग पोस्ट के लिए एंटिटी फ्रेमवर्क जोड़ना (Pt
परिचय
अब इस ब्लॉग को Entity Framework का उपयोग कर चल रहा है मैं नए पोस्ट और भाषाएँ आसानी से जोड़ सकता हूँ
इस पोस्ट में मैं इस प्रक्रिया के लिए कुछ छोटे जोड़े जो मैंने किया है और कैसे यह भविष्य में सुधारों को सक्षम करता है
भाग देखें 1, 2, 3 , 4 और 5 पिछले चरणों के लिए
पृष्ठभूमि अद्यतन
ईएफ में जाने के साथ मेरे सामने एक समस्या यह थी कि मैं साइट अद्यतन करने की प्रक्रिया को बनाए रखता रहा और साइट अद्यतनी को लंबित नहीं करता।
पिछले भागों में मैंने दिखाया है कि कैसे मैं एक का उपयोग किया MarkdownBlogService ब्लॉग पोस्ट और भाषाओं को प्राप्त करने के लिए. यह सेवा हमारे नियंत्रकों और दृश्यों में इंजेक्शन किया गया था। BlogViewModels.
अद्यतन प्रक्रिया निम्नलिखित है
flowchart LR
A[Write New Markdown File] -->|Checkin To Github| B(Github Action Triggers)
B --> C(Builds Docker Image)
C --> D(Watchtower Pulls new Image)
D --> E{New Files Added?}
E -->|Yes| F(Add File to Database)
E -->|No| G(Skip Database Seeding)
F --> H(Site Updated)
G --> H(Site Updated)
पृष्ठभूमि अद्यतन जब साइट ASP में आरंभ होता है अनुमति देने के लिए मैं एक का उपयोग करता हूँ IHostedService नए फ़ाइलों की जाँच करने और डाटाबेस में उन्हें जोड़ने के लिए
यह बहुत सरल है और यह सब नीचे करता है
public class BackgroundEFBlogUpdater(IServiceScopeFactory scopeFactory, ILogger<BackgroundEFBlogUpdater> logger) : IHostedService
{
private Task _backgroundTask;
public async Task StartAsync(CancellationToken cancellationToken)
{
var scope = scopeFactory.CreateScope();
var context = scope.ServiceProvider.GetRequiredService<IBlogPopulator>();
logger.LogInformation("Starting EF Blog Updater");
_backgroundTask = Task.Run(async () => await context.Populate(), cancellationToken);
logger.LogInformation("EF Blog Updater Finished");
}
public async Task StopAsync(CancellationToken cancellationToken)
{
}
}
ध्यान दें कि एक महत्वपूर्ण पहलू यहाँ है कि एफ इस बारे में बहुत चुनेदार है IServiceScopeFactory सेवा के लिए एक नए क्षेत्र का सृजन करने के लिए
के उपयोग IServiceScopeFactory ASP में एक आम पैटर्न है जब आपको एकलटोन सेवा में एक स्कोप सेवा का उपयोग करने की आवश्यकता होती है
मैं भी उपयोग करना था Task.Run एक नई थ्रेड में कार्य चलाने के लिए IHostedService मुख्य थ्रेड पर चलाता है और मैं नहीं था
यह है BackgroundEFBlogUpdater वर्ग. यह' का प्रयोग करके इंजेक्शन किया गया है SetupBlog विस्तार विधि जो मैंने पहले दिखाया था
public static void SetupBlog(this IServiceCollection services, IConfiguration configuration, IWebHostEnvironment env)
{
var config = services.ConfigurePOCO<BlogConfig>(configuration.GetSection(BlogConfig.Section));
services.ConfigurePOCO<MarkdownConfig>(configuration.GetSection(MarkdownConfig.Section));
services.AddScoped<CommentService>();
switch (config.Mode)
{
case BlogMode.File:
Log.Information("Using file based blog");
services.AddScoped<IBlogService, MarkdownBlogService>();
services.AddScoped<IBlogPopulator, MarkdownBlogPopulator>();
break;
case BlogMode.Database:
Log.Information("Using Database based blog");
services.AddDbContext<MostlylucidDbContext>(options =>
{
if (env.IsDevelopment())
{
options.EnableSensitiveDataLogging(true);
}
options.UseNpgsql(configuration.GetConnectionString("DefaultConnection"));
});
services.AddScoped<IBlogService, EFBlogService>();
services.AddScoped<IBlogPopulator, EFBlogPopulator>();
services.AddHostedService<BackgroundEFBlogUpdater>();
break;
}
services.AddScoped<IMarkdownBlogService, MarkdownBlogPopulator>();
services.AddScoped<MarkdownRenderingService>();
}
विशेष रूप से यह लाइन services.AddHostedService<BackgroundEFBlogUpdater>();
ASP में यह एक नया होस्टेड सर्विस आरंभ करता है जो पृष्ठभूमि में चलता है
यह आपके ASP में पृष्ठभूमि प्रक्रमण को जोड़ने का एक सरल तरीका है
अंत में
इस पोस्ट में मैंने दिखाया कि कैसे मैने अपने ASP को एक पृष्ठभूमि सेवा जोड़ी है।