Ну, вы не можете делать оба одновременно.Не ясно, действительно ли это ваше требование, но если это так, вам не повезло.
Чтобы передать вещи во время проектирования, вы буквально используете конструктор, как и любой другой класс:
options.Filters.Add(new ContentDispositionFilter("foo"));
Который затем будет соответствовать конструктору в этом классе, например:
public ContentDispositionFilter(string myParam)
Чтобы добавить зависимости во время выполнения, вам придется использовать внедрение зависимостей.Проще говоря, вы заставляете конструктор иметь параметры для различных зависимостей:
public ContentDispositionFilter(Dependency1 dep1, Dependency2, dep2)
Затем, чтобы зарегистрировать глобальный фильтр, вы должны будете сделать это с помощью type , а не с ссылкой.То, как вы делаете это в настоящее время по ссылке, где ваш новый это в линию.Вместо этого вам нужно будет сделать:
options.Filters.Add(typeof(ContentDispositionFilter));
И затем, конечно, вам нужно убедиться, что ваш фильтр действительно зарегистрирован в коллекции сервисов:
services.AddScoped<ContentDispositionFilter>();
РЕДАКТИРОВАТЬ
Стоит отметить, что сама регистрация службы дает вам возможность сделать и то, и другое.На самом деле вы можете передать заводскую лямбду следующим образом:
services.AddScoped(p =>
{
var dep1 = p.GetRequiredService<Dependency1>();
return new ContentDispositionFilter("foo", dep1);
}
Итак, у вас есть статическая вещь (строка), которую вы передаете в и , получая сервис времени выполнения.Параметр p
- это экземпляр IServiceProvider
, поэтому вы можете извлечь из него любую понравившуюся вам услугу.
EDIT # 2
Итак, я простозаметил комментарий в конце вашего блока кода:
//
// *** HOW DO I PASS httpResponseMessage TO A FILTER *** ???
//
Просто вы не можете.Не здесь.Я не уверен, чего вы в конечном итоге пытаетесь достичь, но это не способ сделать это.Похоже, это проблема XY .Попробуйте создать новый вопрос, напрямую связанный с тем, что вы на самом деле хотите, вместо решения, которое, как вы думаете, доставит вас туда.