Попытка реализовать чистую архитектуру в новом проекте, но с некоторыми ограничениями: я хочу максимально потерять зависимости.
Базовый:
Решение имеет несколько проектов:
WebApi
UseCases
(на который ссылается WebApi
, реализует бизнес-логику)
Gateway
(на что указывает UseCases
, предоставляет интерфейсы репозитория для UseCases
)
DataAccess.EfCore
(на который ссылается Gateway
, реализует доступ к MSSQL)
Domain.Core
(модель домена здесь)
Что нужно и какие проблемы решаются и остаются здесь: - Все проекты имеют IHostingStartup
реализаций, где они* сами настраивают: UseCases
регистрируют некоторые поведения, Gateway
- это интерфейсы, EfCore
- настраивают DbContext
и регистрируют его.
выглядит хорошо.Почти.На данный момент есть две архитектурные проблемы:
- Настройка идентификации ядра ASP.NET.Обычно это делается в проекте
WebApi
, но в этом случае я должен ссылаться на проект EfCore
, чтобы иметь возможность написать это:
services.AddIdentity<User, Role>().AddEntityFrameworkStores<MyDbContext>();
class "MyDbContext
"объявлено в проекте EfCore
, поэтому эта строка содержит настройки из двух миров:
Если я поместил конфигурацию Identity в DataAccess
- тогда мне придется настроить такие вещи, какНастройки блокировки идентификации и страницы Login / AccessDenied в DataAccess
, что также не так, и что не следует делать там.Можно ли разделить конфигурацию, поэтому DataAccess.EfCore
просто зарегистрирует DbContext
хранилище для идентификации, а WebApi
настраивает блокировки и другие вещи?
Я использую пользовательские секреты для хранения строк подключения.Как передать его в реализацию
IHostingStartup
для настройки
DbContext
?Подпись метода позволяет работать только с
IWebHostBuilder
builder, поэтому я застрял и здесь.
Любые идеи, помощь, опыт?
UPD: Или почти забыли о3-я задача:
Когда я запускаю приложение в первый раз - я хочу поместить некоторые данные в БД.И проблема здесь в том, чтобы заполнить
IdentityUser
сущности, как они должны быть добавлены через
UserService
(хеширование паролей и т. Д.), Но в то же время я хочу сделать это в проекте
DataAccess.EfCore
: я использую
FluentAPI
для настройки моделей и заполнения данных методом «
HasData
».Так что любая идея здесь также будет оценена!