注入したいアクションフィルターはこんな感じで始まります
public class UserAuthorisation : AuthorizeAttribute
{
public IWcfClientProxy<IAppFrameworkServiceChannel>
FrameworkServiceProxy { get; set; }
私は次のようにコンテナを設定しました:
container.Register<IWcfClientProxy<IAppFrameworkServiceChannel>>(
()=> new WcfClientProxy<IAppFrameworkServiceChannel>());
container.RegisterInitializer<UserAuthorisation>(handler =>
{
handler.FrameworkServiceProxy = container
.GetInstance<IWcfClientProxy<IAppFrameworkServiceChannel>>();
});
これを実行すると、FrameworkServiceProxy
プロパティはnullになります。
私はこの投稿を読みました:Simple Injector:基本クラスにプロパティを注入し、答えに従いました。このページのSimpleInjectorDocumentationの例も読みました。
私は基本クラスに注入していません、そして多分それは問題ですか?
## アップデート ##
スティーブンスの回答で述べられていることからうまくいくはずだと思うので、私はより多くの情報を追加しています。
MVC 3用のNuGetパッケージを使用しています。これにより、アプリケーションに以下が追加されます。
public static class SimpleInjectorInitializer
{
/// <summary>Initialize the container and register it as MVC3 Dependency Resolver.</summary>
public static void Initialize()
{
var container = new Container();
InitializeContainer(container);
container.RegisterMvcControllers(Assembly.GetExecutingAssembly());
container.RegisterMvcAttributeFilterProvider();
container.Verify();
DependencyResolver.SetResolver(new SimpleInjectorDependencyResolver(container));
}
private static void InitializeContainer(Container container)
{
container.Register<IWcfClientProxy<IAppFrameworkServiceChannel>>(() => new WcfClientProxy<IAppFrameworkServiceChannel>());
container.RegisterInitializer<UserAuthorisation>(handler =>
{
handler.FrameworkServiceProxy = container.GetInstance<IWcfClientProxy<IAppFrameworkServiceChannel>>();
});
}
これにはcontainer.RegisterMvcAttributeFilterProvider();
、フィルタープロバイダーを登録する必要があり、フィルターがコンテナーを介して作成され(この理解は間違っている可能性があります)、プロパティが自動的に接続されることを意味する必要があることを理解していることも含まれます。
私のフィルターは次のようにGlobal.asax.csに登録されています。
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
filters.Add(new HandleErrorAttribute());
filters.Add(new UserAuthorisation());
}
フィルタはコンテナによって作成されていないように思われるので、それを実現するには何か他のことをする必要があると思いますか?