Как заставить службу данных с BehaviorSubject Angular возвращать последнее значение, установленное с помощью next ()

Вы просто регистрируете свои типы и предоставляете публичный конструктор, который определяет требования, и если они доступны, волшебство произойдет. Если вы используете crypto-провайдера, вы можете зарегистрировать его по-другому:

services.AddSingleton(cryptoSettings);
services.AddSingleton<ICryptoProvider, DefaultCryptoProvider>();

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

Также проверьте различные методы сбора сервисов - не все классы должны быть одиночными.


class UserRepository : IUserRepository{
    UserRepository(IDatabaseContext context, ICryptoProvider provider){
    }
}

и зарегистрируйте его:

services.AddTransient<IUserRepository, UserRepository>();

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

class UserService : IUserService{
    UserService(IUserRepository userReposiotry, IMembershipRepository membershipRepository){
    }
}

и конструктор контроллера выглядит следующим образом:

    UserController(IUserService service){
    }

С точки зрения контроллера вам все равно, что требуются два репозитория, и каждый из них требует контекста базы данных и поставщика криптографии. Контролеру просто нужно проверить полезную нагрузку, и если действительное задание делегировано службе для обработки. В свою очередь сервис не заботится о внутренней логике и требованиях к репозиториям.

Что касается регистраций, то это серия вызовов в коллекции services AddTransient<Interface,Class>(). И да, вы получите соотношение 1: 1 между интерфейсами и классами. Это хорошо для модульного тестирования.

0
задан Abhishek 19 January 2019 в 13:20
поделиться

1 ответ

Вы пытаетесь вернуть true из подписки, а не из охраны. Ваш охранник всегда возвращает ложь. CanActivate может возвращать также наблюдаемый, который в конечном итоге разрешается в логическое значение, которое идеально подходит для вашей ситуации:

0
ответ дан Martin Nuc 19 January 2019 в 13:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: