2021-12-15 10:22:55 +01:00

49 lines
1.7 KiB
C#

using HackerNet.Application;
using HackerNet.Domain;
using HackerNet.Infrastructure.Repositories.EntityFramework;
using HackerNet.Infrastructure.Repositories.Memory;
using Microsoft.AspNetCore.Builder;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
namespace HackerNet.Infrastructure.AspNet;
public static class ServiceCollectionExtensions
{
public static IServiceCollection AddHackerNetServicesMemory(this IServiceCollection services)
{
var link = new Link("https://localhost:7050/", "Youhouuu");
var comment = new Comment(link.Id, "Wow!");
var linksRepository = new MemoryLinkRepository(link);
var commentsRepository = new MemoryCommentRepository(comment);
services.AddSingleton<ILinkRepository>(linksRepository);
services.AddSingleton<ICommentRepository>(commentsRepository);
services.AddSingleton<IReadStore>(new MemoryReadStore(linksRepository, commentsRepository));
services.AddSingleton<LinkService>();
return services;
}
public static IServiceCollection AddHackerNetServicesEntityFramework(this IServiceCollection services)
{
services.AddDbContext<HackerContext>(options
=> options.UseSqlite("Data Source=hackernet.db"));
services.AddScoped<ILinkRepository, EFLinkRepository>();
services.AddScoped<ICommentRepository, EFCommentRepository>();
services.AddScoped<IReadStore, EFReadStore>();
services.AddScoped<LinkService>();
return services;
}
public static void MigrateDatabase(this IApplicationBuilder app)
{
using var scope = app.ApplicationServices.CreateScope();
using var ctx = scope.ServiceProvider.GetRequiredService<HackerContext>();
ctx.Database.Migrate();
}
}