Zarówno ServiceFilter, jak i TypeFilter są konstruowane przy użyciu iniekcji zależności.
Według this typeFilter jest tworzony przy użyciu Microsoft.Extensions.DependencyInjection.ObjectFactory
co ostatecznie pozwala na zapewnienie sobie parametry konstruktora (Można zobaczyć Argumenty parametr w konstruktorze). Rozwiązuje również te, których nie podajesz.
Więc można zrobić coś takiego:
public class AttachMetadataAttribute : Attribute, IAsyncActionFilter
{
public AttachMetadataAttribute(SomeType someValue, ISomeService service)
{
}
}
i można użyć, że tak:
[TypeFilter(typeof(AttachMetadataAttribute),
IsReusable = true,
Order = 10,
Arguments = new object[] { someValue})]
Więc tu pierwszy parametr (someValue) jest dostarczana przez ciebie i usługi zostanie wstrzyknięty przez pojemnik.
Uwaga: Ostrożnie o numerze IsReusable. Jeśli jest ustawiony na wartość true, wstrzyknięta usługa jest tworzona tylko raz.
Dokumentacja programu ASP.NET Core zawiera szczegółowe objaśnienia filtrów. Sprawdziłeś to? –