ASP.NET MVC 5で、DI ContainerのAutofacを使う方法を簡単に記載したいと思います。
つぎの手順で適用します。
- 1. NuGetからパッケージをインストールする
- 2. Injection対象を作成する
- 3. コントローラーへInjectionするコードを記述する
- 4. Global.asaxでContainerの初期化処理を記述する
1. NuGetからパッケージをインストールする
インストールするパッケージはこちら。
こちらを適用してインストールした場合、Autofac本体は必ずしも最新が適用される訳ではありませんので、個別にアップデートすることをお勧めします。
2. Injection対象を作成する
とりあえずテスト用に次のようなインターフェースとクラスを作成しました。
public interface IMessenger { string About { get; } string Contact { get; } } public class Messenger : IMessenger { public string About => "About Message."; public string Contact => "Contact Message."; }
これをコントローラーへInjectionします。
3. コントローラーへInjectionするコードを記述する
先ほど作成したクラスをコントローラーへInjectionするコードを記述します。
この例ではASP.NET MVC 5の標準テンプレートで作成されるHomeControllerクラスへInjectionしています。
public class HomeController : Controller { private readonly IMessenger _messenger; public HomeController(IMessenger messenger) { _messenger = messenger; } public ActionResult Index() => View(); public ActionResult About() { ViewBag.Message = _messenger.About; return View(); } public ActionResult Contact() { ViewBag.Message = _messenger.Contact; return View(); } }
4. Global.asaxでContainerの初期化処理を記述する
Global.asaxのApplication_Startメソッドに、元々ある記述の後ろに次のように記述します。
protected void Application_Start() { AreaRegistration.RegisterAllAreas(); FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); RouteConfig.RegisterRoutes(RouteTable.Routes); BundleConfig.RegisterBundles(BundleTable.Bundles); var builder = new ContainerBuilder(); // アセンブリ内部のControllerを全て一括登録する builder.RegisterControllers(typeof(MvcApplication).Assembly); // 注入したいオブジェクトをコンテナへ登録する builder.RegisterType<Messenger>().As<IMessenger>(); var container = builder.Build(); // ASP.NETへAutofacのDependencyResolverを登録する DependencyResolver.SetResolver(new AutofacDependencyResolver(container)); }
なお詳細はこちらが参考になるでしょう。
http://autofaccn.readthedocs.io/en/latest/integration/mvc.html
以上です。