Если в определении Association
важны типы Id
, вы можете создать включающий «контекст»:
public static partial class EntityIds<TId1, TId2> {
public class Association<TEntity1, TEntity2>
where TEntity1 : Entity<TId1>
where TEntity2 : Entity<TId2>
{
// ...
}
}
Таким образом, объявление класса Association
остается понятным, и оно сохраняет необходимые аргументы типа для своих параметров типа.
Фабричный метод может помочь вам в нормальном случае:
public static class AssociationFactory {
public static EntityIds<TId1, TId2>.Association<Entity<TId1>, Entity<TId2>> Create<TId1, TId2>(/*params...*/) {
return new EntityIds<TId1, TId2>.Association<Entity<TId1>, Entity<TId2>>(/*params...*/);
}
}
Это выглядит слишком много, и если у вас нет специализаций сущностей, вы можете смоделировать ассоциацию по-другому:
public class Association<TId1, TId2>
{
// ...
Entity<TId1> Entity1 { get; set; }
Entity<TId2> Entity2 { get; set; }
// ...
}