web-dev-qa-db-ja.com

ASP.NET MVC3コントローラーのautofacコンテナーにアクセスするにはどうすればよいですか?

MVCコントローラーの名前付きパラメーターを使用して依存関係を解決したいと思います。 Autofacコンテナにアクセスできれば、次のようにアクセスできるはずです。

var service = Container.Resolve<IService>(
    new NamedParameter("fileExtension", dupExt)
);

AutoFacコンテナにアクセスする方法がわかりません。使用できるコンテナーへのグローバル参照はありますか、または名前付きパラメーターを使用する別の方法はありますか?

23
Richard Garside

同じことにIComponentContextを使用できることを発見しました。 IComponentContextのインスタンスをコントローラーに挿入できます。

public class MyController : Controller
{
    private readonly IComponentContext _icoContext;

    public void MyController(IComponentContext icoContext)
    {
        _icoContext= icoContext;
    }

    public ActionResult Index()
    {
        var service = _icoContext.Resolve<IService>(
            new NamedParameter("ext", "txt")
        );
    }
}

この質問で、コンテナへのグローバルアクセスを取得するためのいくつかの良いアドバイスを見つけました: WebアプリケーションのAutofac、簡単にアクセスできるようにコンテナをどこに保存する必要がありますか?

また、依存関係リゾルバーにグローバルにアクセスする方法もここで見つけました: ASP.NET MVC3のautofac依存関係リゾルバーへのグローバルアクセス?

32
Richard Garside
AutofacDependencyResolver.Current.ApplicationContainer

.Resolve

.ResolveNamed

.ResolveKeyed

.....
12
chenZ