То, чего вы хотите достичь, невозможно.
Что я рекомендую вам сделать, так это создать область действия для каждого варианта, который у вас есть. Но вместо передачи параметра в виде динамической c строки вам нужно будет передать класс, по одному на каждый динамический c -параметр, не уверенный, будет ли он подходящим для вашего варианта использования.
public class IdClass1 : ParentClassWithId
{}
public class IdClass2 : ParentClassWithId
{}
public class ParentClassWithId
{
public string Id { get; set; }
}
тогда ваш IOrganizationIdProvider
станет IOrganizationIdProvider<T>
, где T
- это класс.
public interface IOrganizationIdProvider<T>
{
//code
}
Для кода многократного использования преобразуйте ваш основной OrganizationProvider
класс в абстрактный
public abstract class OrganizationProvider<T>
{
}
, а затем для каждого из «Dynami c» вам нужен класс, чтобы использовать его:
public class OrganizationIdProvider1<T> : OrganizationProvider<T>, IOrganizationIdProvider<T>
{
//Code
}
public class OrganizationIdProvider2<T> : OrganizationProvider<T>, IOrganizationIdProvider<T>
{
//Code
}
при первоначальном внедрении зависимости вам нужно будет объявить все из возможных вариантов в этом примере:
scope.AddScoped<IOrganizationIdProvider<IdClass2>, OrganizationIdProvider2<IdClass2>>()
.AddScoped<IOrganizationIdProvider<IdClass1>, OrganizationIdProvider1<IdClass1>>();
, и вам понадобится немного логики c, чтобы получить правильный интерфейс, но это может решить вашу проблему.