しばやん雑記

Azure とメイドさんが大好きなフリーランスのプログラマーのブログ

ASP.NET MVC 3 と MEF 2 を組み合わせる

ASP.NET MVCの依存性注入とMEF 2

Project Silk では Unity を使ってましたが、MEF 2 からは MVC 3 向けに IDependencyResolver の実装が入るみたいですね。さらにカタログを作らなくても規約ベースで上手いことインジェクションしてくれるみたいです。

screenshot

Managed Extensibility Framework - Home

しかし、この規約ベースってのはなかなか曲者のような気がします。Parts 名前空間に入れる必要があるので、ここまで規約ベースにする必要ないんじゃないかなと個人的に思ったり。DI でインジェクションするものは、モデルだったりサービスだったりするわけで、何でも Parts 名前空間に入れて、その中でさらに分けるの?と。別アセンブリに分離するぐらいのが個人的には好きです。

通常はインターフェースと実装を分離すると思うのですが、インジェクションするためには Parts 名前空間にインターフェースと実装の両方を入れておかないといけないのかなとか考えることが多い気がします。Unity や Ninject だと柔軟に設定できるようになっています。設定を行うか、規約で解決するか迷うところです。

しかし、ModelBinderExport 属性で独自のモデルバインダをインジェクション出来たり、結構面白い機能が多そうです。属性で設定を行うのは ASP.NET MVC っぽいですよね。