Вы можете использовать Anglar Routing guard с интерфейсом CanActivate .
@Injectable()
export class CheckAuthenticationGuard implements CanActivate {
constructor(/* Inject whatever you want here */) {}
public canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable|Promise|boolean|UrlTree {
// Make request and return if you are authenticated or not.
}
}
@NgModule({
imports: [
RouterModule.forRoot([
{
path: 'home/',
component: HomeComponent,
canActivate: [CheckAuthenticationGuard]
},
{
path: 'otherRoute',
component: OtherComponent,
canActivate: [CheckAuthenticationGuard]
},
...
])
],
providers: [
...,
CheckAuthenticationGuard
]
})
class AppModule {}
Каждый раз, когда вы будете переходить к одному из определенных вами маршрутов, он будет выполнять CheckAuthenticationGuard
, а если ваш метод canActivate
возвращает true
, он будет активировать ваш маршрут, в противном случае он даст вам ошибка.
Похоже, что нет способа сослаться на универсальный шаблон в XML-документации, потому что на самом деле нет способа сослаться на универсальный шаблон любого конкретного типа.
Лассе В. Карлсен ответ заставил меня щелкнуть:
Если вы напишете
, компилятор просто использует "Int32" в качестве имени параметра типа , а не аргумент типа. Запись
тоже подойдет. Это имеет смысл, потому что в MSDN нет специальной страницы для "IEnumerable of int", на которую могла бы ссылаться ваша документация.
Чтобы правильно задокументировать свой класс, я думаю, вам нужно написать что-то вроде:
<summary>
Returns an <see cref="IEnumerable{T}" /> of <see cref="KeyValuePair{T,U}" />
of <see cref="String" />, <see cref="Int32" />.
</summary>
Надеюсь, вы как текст.
// Use "<" instead of "<" symbol and ">" instead of ">" symbol.
// Sample:
<see cref="Expression<Func<T, bool>>"/>
На что именно вы хотите, чтобы он ссылался?
В документации нет такого понятия, как выражение
, поэтому, очевидно, это ссылка это не сработает.
Вы можете сослаться на Выражение
, потому что оно существует.
Что касается того, работает или нет, ни одно из следующих действий не работает в Visual Studio 2008 / .NET 3.5 для меня:
/// <see cref="Expression<Func<T>>"/>.
/// <see cref="Expression{Func{T}}"/>.
Но это работает:
/// <see cref="Expression{T}"/>.
, поэтому очевидно, что параметр универсального типа не должен совпадать с параметром в объявлении.