5

MVC4 で Autofac 用の Nuget MVC3 統合パッケージを使用しています。ほとんどの場合は機能します (コントローラーを使用したコンストラクター注入はうまく機能しています) が、登録されたサービスをアクション フィルター プロパティに注入しません。

これは、Global.asax.cs での私の登録です。

builder.RegisterType<AspNetMembershipProviderWrapper>().As(typeof(IUserService)).InstancePerHttpRequest();
// 5) action filters
builder.RegisterType<SetCultureAttribute>().As<IActionFilter>().PropertiesAutowired().SingleInstance();
builder.RegisterFilterProvider();
var container = builder.Build();
DependencyResolver.SetResolver(new AutofacDependencyResolver(container));

次に、SetCultureAttribute私はこれを持っています:

public IUserService _userService { get; set; } // it doesn't get injected, null

これは、属性のコンストラクターでも機能しません。

_userService = DependencyResolver.Current.GetService<AspNetMembershipProviderWrapper>(); // always returns null

DependencyResolver.Current.GetService()また、アクション フィルターのコンストラクター内で呼び出されると、登録されている他のすべてのサービスに対しても null を返します (デバッグ ウィンドウでテストしてみました)。

だから私は何かが正しく機能していないと思います。MVC3 統合を使用しても問題ありませんか、それとも MVC4 Nuget パッケージ (RC 用であると言われています) を使用する必要がありますか?

これを機能させるために他にできることはありますか?

4

1 に答える 1

9

ActionFilter インジェクションを機能させるには、プロバイダーを登録する必要がありますが、これはあなたの例にはありません:

builder.RegisterFilterProvider();

ここにドキュメントがあります: http://code.google.com/p/autofac/wiki/MvcIntegration3

どちらの場合も、サービスを IUserService として登録したので、その方法で解決する必要があります。

_userService = DependencyResolver.Current.GetService<IUserService>();

属性を登録する必要はありません。詳細については、上記の wiki リンクを確認してください。

于 2012-10-15T00:13:26.250 に答える