Dependency Injection и класс контекста

168
19 марта 2019, 06:40

Проект сделан по трехуровневой архитектуре. Нужно, что бы Entity Framework создал базу данных по классу контекста и внедрить через Dependency Injection этот класс в классы репозиториев. Структура проекта:

  • CarServiceAssignment.Presentation - ASP.NET Core MVC Project

  • CarServiceAssignment.BLL - .NET Core class library

  • CarServiceAssignment.DAL - .NET Core class library

У меня есть следующий класс контекста(в CarServiceAssignment.DAL):

public class CarServiceContext : DbContext
{
    public DbSet<Car> Cars { get; set; }
    public DbSet<Owner> Owners { get; set; }
    public CarServiceContext(DbContextOptions<CarServiceContext> options)
            :base(options)
    {
        Database.EnsureCreated();
    }
}

и класс отвечающий за регистрацию сервисов(CarServiceAssignment.BLL):

public static class ServiceProvider
{
    public static void AddBllServices(this IServiceCollection services)
    {
        services.AddScoped<ICarService, CarService>();
    }
    public static void AddDalServices(this IServiceCollection services)
    {
        services.AddScoped<CarServiceContext>();
        services.AddScoped<IUnitOfWork, EFUnitOfWork>();
    }
}

Регистрация сервисов происходит в классе Startup, метод - (в CarServiceAssignment.Presentation):

public void ConfigureServices(IServiceCollection services)
{
    services.Configure<CookiePolicyOptions>(options =>
    {
        // This lambda determines whether user consent for non-essential 
        cookies is needed for a given request.
        options.CheckConsentNeeded = context => true;
        options.MinimumSameSitePolicy = SameSiteMode.None;
    });
    services.AddMvc()
            .SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
    services.AddDalServices();
    services.AddBllServices();
}

Когда я вызываю метод контрллера, который взаимодействует с базой данных через класс CarServiceContext, то получаю следующую ошибку:

InvalidOperationException: Unable to resolve service for type 'Microsoft.EntityFrameworkCore.DbContextOptions`1[CarServiceAssignment.DAL.EF.CarServiceContext]' while attempting to activate 'CarServiceAssignment.DAL.EF.CarServiceContext'.

Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteFactory.CreateArgumentCallSites(Type serviceType, Type implementationType, CallSiteChain callSiteChain, ParameterInfo[] parameters, bool throwIfCallSiteNotFound)

Но если я полностью удаляю следующий конструктор из класса контекста:

public CarServiceContext(DbContextOptions<CarServiceContext> options) :base(options)
{
    Database.EnsureCreated();
}

, то ошибки не будет, но и база данных не создается.

READ ALSO
Файлобменная сеть для программиста

Файлобменная сеть для программиста

Пишу программу на C#Суть программы в скачивании определенных компонентов, таких как например:

126
Прозрачный UserControl

Прозрачный UserControl

И так проблема заключается в том что у меня есть UserControl на котором есть кнопка, у юзер контрола фон - transparent у кнопки тоже, но при добавлении...

168
EF6 и Postgres ошибка

EF6 и Postgres ошибка

Сделал dll в которой классы и датаконтекст

192
Написать программу, выполняющую поиск текста в текстовых файлах

Написать программу, выполняющую поиск текста в текстовых файлах

хотел бы у вас узнать ,как написать данную программу, я новичок на си шарпе, поэтому еще не знаю как с ним работатьЕсли вы можете подскажите...

144