2011-01-18 8 views
0

を注入することなく、各コントローラ用のスコープを要求し、私は最近、と題するこの記事に出くわした: LINQのSQLとASP.NET MVCへ - リクエスト パーのDataContextをこのリンクで: http://www.jeremyskinner.co.uk/2010/01/31/linq-to-sql-and-asp-net-mvc-datacontext-per-request/Ninject、LINQ to SQLのは、

私は希望私はmvc 3 rtmを使用しているので、好ましくは新しいmvc 3依存リゾルバを使用して、構造マップではなくninjectを使用してこれを設定します。

記事の関連部分はこれです:まず、カスタムレジストリインスタンスを渡しあなたのGlobal.asax内ObjectFactory.Configureを呼び出すことによって、のStructureMapを設定する必要があります

protected void Application_Start() { 
RegisterRoutes(RouteTable.Routes); 

ObjectFactory.Configure(cfg => { 
    cfg.AddRegistry(new MyRegistry()); 
}); 
} 

はMyRegistryのコードは次のようになります。

public class MyRegistry : Registry { 
public MyRegistry() { 
    For<BlogDataContext>() 
    .HttpContextScoped() 
    .Use(c => new BlogDataContext()); 

    Scan(scan => { 
    scan.AddAllTypesOf<Controller>(); 
    }); 
} 
} 

ここでは、HTTPリクエストごとに自分のBlogDataContextのインスタンスを1つ作成し、各Controllerインスタンスをコンテナに登録するようにStructureMapに指示します。

次に、StructureMapを使用してコントローラをインスタンス化するようにMVCに指示する必要があります。これは、カスタムControllerFactoryを作成することによって行うことができます。

public class StructureMapControllerFactory : DefaultControllerFactory { 
protected override IController GetControllerInstance(RequestContext requestContext, Type controllerType) { 
    return (IController) ObjectFactory.GetInstance(controllerType); 
} 
} 

私たちは、その後、私たちのApplication_StartでStructureMapControllerFactoryでDefaultControllerFactoryを置き換えることができます。

protected void Application_Start() { 
RegisterRoutes(RouteTable.Routes); 

ObjectFactory.Configure(cfg => { 
    cfg.AddRegistry(new MyRegistry()); 
}); 

ControllerBuilder.Current.SetControllerFactory(
    new StructureMapControllerFactory()); 
} 

私はninject 2.0よりもむしろと同じことをしたいと思います構造マップ。私はmvc3のninjectでmvc 3サイトを構築しています。私はnugjectからninject mvc 3パッケージをダウンロードしました。そして、このファイルを私のソリューションに入れて、配線を処理しました。 AppStart_NinjectMVC3.cs

私はstructurmapを使いたくないのですが、同じ設定をninjectで行うことができますが、どのように配線するのかは分かりません。

ありがとうございます。

答えて

2

私はむしろhttps://github.com/ninject/ninject.web.mvcにあるninjectプロジェクトの公式のmvc3拡張を使用したいと思います。 mvc3アプリケーションを配線する方法を示す完全なサンプルアプリケーションが付属しています。