Как я могу получить новый ApiAuthorizationDbContext в моем контроллере - PullRequest
0 голосов
/ 29 января 2020

ApiAuthorizationDbContext - это мой DBContext по умолчанию.
Теперь, как мне получить этот контекст в контроллере?
Я могу создать нормальный DBContext с новым DbContext(), но с ApiAuthorizationDbContext я должен дать варианты, где Я не знаю, как их получить.

Мой ApiAuthorizationDbContext:

public class ApplicationDbContext : ApiAuthorizationDbContext<ApplicationUser>
{
    public DbSet<Tenant> Tenants { get; set; }
    public DbSet<SiteSettings> SiteSettings { get; set; }


    public ApplicationDbContext(
        DbContextOptions options,
        IOptions<OperationalStoreOptions> operationalStoreOptions) : base(options, operationalStoreOptions)
    {
    }

    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
        if (!optionsBuilder.IsConfigured)
        {
            AppSettings.DbOptions(optionsBuilder);
        }
    }
}

Мой контроллер:

public class TenantHelper 
{
    private readonly ApplicationDbContext _context;

    public TenantHelper(ApplicationDbContext context)
    {
        _context = context;
    }

    public static List<Tenant> GetAllTenants()
    {
        List<Tenant> tenants = new List<Tenant>();

        tenants = _context.Tenants.ToList();

        return tenants;
    }
}

Ответы [ 2 ]

2 голосов
/ 29 января 2020

Внедрение зависимостей в вашем приложении позволяет использовать любой объект в качестве набора функций, которые могут быть повторно использованы несколькими объектами. Чтобы добавить контекст вашей базы данных в качестве внедрения зависимостей, вы должны добавить его в файл Startup.cs, который. Создается шаблон по умолчанию для веб-приложений NetCore.

using Microsoft.Extensions.DependencyInjection;

public void ConfigureServices(IServiceCollection services)
{
    services.AddDbContext<ApplicationDbContext>();
}

Теперь ваш контекст можно внедрить в любой конструктор объектов вашего приложения, и вы можете сохранить его как свойство, к которому можно получить доступ в любой точке этой области объекта

public class MyController
{
    private readonly ApplicationDbContext _dbContext;

    public MyController(ApplicationDbContext dbContext)
    {
        _dbContext = dbContext;
    }

    private void MethodA()
    {
      //accessing dbcontext
      _dbContext.MyTable.ToList();
    }
}

Редактировать : Очевидно, OP имел в виду, что он хочет, чтобы его TenantHelper был доступен во всех его приложениях, и все же это проблема, которую решает внедрение зависимостей, но требуется лишь быстрая доработка.

public void ConfigureServices(IServiceCollection services)
{
    //This adds your object as a reusable set of functions that is initialized for every different request
    services.AddScoped<TenantHelper>();
}

Теперь проделайте тот же процесс для вставки вашего TenantHelper в другой код, что и в ApplicationDbContext

0 голосов
/ 29 января 2020

Создайте библиотеку с вами ApiAuthorizationDbContext и поместите ссылку из этой библиотеки в ваш проект с контроллером

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...