Я хочу добавить зависимость, если выполняется какое-то условие, но для проверки условия мне нужно использовать IServiceProvider
. Есть ли хороший способ сделать это?
Вот мой код, но наверняка он не работает должным образом по многим причинам, но это то, чего я достиг до сих пор:
Также я не хочу перестраивать IServiceCollection
дважды!
public static IServiceCollection AddWithCondition<TInterface, TImplementation>(
this IServiceCollection collection,
Func<IServiceProvider, bool> validateFunc,
ServiceLifetime lifetime,
Func<IServiceProvider, TImplementation> factory)
where TImplementation : class
{
collection.Add(new ServiceDescriptor(typeof(TInterface), p => validateFunc(p) ? factory(p) : default(TImplementation), lifetime));
var descriptorToRemove = collection.FirstOrDefault(d => d.ServiceType == typeof(TInterface) && d.ImplementationInstance == default);
if (descriptorToRemove != null)
collection.Remove(descriptorToRemove);
return collection;
}