これを行うには、Peteのソリューションを使用する必要があります。更新されたソリューションを提供してくれた彼に感謝します。
私はついにそれを作りました、これがそれをする方法です:
まず、すべての依存関係を持つコンストラクターを使用して属性を作成します
public class CustomFilterAttribute : ActionFilterAttribute, IAuthorizationFilter
{
private IProperty _property;
public CustomFilterAttribute(IProperty repository)
{
_property = property;
}
....
}
autofacに必要なものをすべて登録します
var builder = new ContainerBuilder();
builder.RegisterControllers(Assembly.GetExecutingAssembly());
builder.RegisterType<MyProperty>().As<IProperty>();
builder.RegisterType<CustomFilterAttribute>().SingleInstance();
builder.RegisterFilterProvider();
IContainer container = builder.Build();
DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
そのようなグローバルフィルターを登録する
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
filters.Add(new HandleErrorAttribute());
filters.Add(DependencyResolver.Current.GetService<CustomFilterAttribute>());
}
global.asaxで、最初にAutofacを登録し、次にグローバルフィルターを登録するようにしてください。
これで、プロパティインジェクションはもう必要ありません。コンストラクターインジェクションは正常に機能します。これは良いことです。