Мне не нужно делать это очень часто, единственный случай, который у меня был, - это использовать Redux Devtools со средним программным обеспечением.
Я просто сделал:
const composeEnhancers = (window as any).__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ || compose;
Или вы можете сделать:
let myWindow = window as any;
, а затем myWindow.myProp = 'my value';
Я бы порекомендовал иметь интерфейс IEntity
следующим образом:
public interface IEntity<TKey> where TKey : IEquatable<TKey>
{
TKey Id { get; set; }
}
Все сущности должны реализовать этот интерфейс, и тогда вы можете получить IRepository
так:
public interface IRepository<TEntity, in TKey> where TEntity : IEntity<TKey> where TKey : IEquatable<TKey>
{
(...)
Task<TEntity> GetByIdAsync(TKey id);
void Insert(TEntity entity);
(...)
}
Использование дженериков поможет вам начать. TId
указывает тип идентификатора.
public class EntityBase<TId>
{
public TId Id {get; set;}
}
public interface IRepository<TId>
{
Task<PayoutResult> Insert(EntityBase<TId> entity);
bool EntityExists(EntityBase<TId> entity);
}
Лично я ненавижу общий репозиторий. Зачем? Это скользкий склон. Я чувствую, что это плохой выбор дизайна. У нас есть приложение с этим повсюду, и это кошмар, чтобы поддерживать. Универсальный репозиторий также не следует принципу разделения .