2012-04-17 6 views
0

Ninjectを使用してEntity Frameworkコンテキストを挿入するMVC3プロジェクトがあります。私はNinjectパッケージ(3.0.0.15)、Ninject.MVC3(3.0.0.6)、Ninject.Web.Common(3.0.0.7)を使用しています。私がWebFormsコードの裏にファイルを挿入しようとする場合を除いて、すべてが本当に素晴らしいです。私はこれが正しいと思っていますが、ワイヤをどのように配線するのかはわかりません.Ninjectは、Razorがインスタンシエートするファイルでも動作していません。 Contextプロパティがnullたびに出てくるASP.NET MVC3でNinject 3.0を使用して非コントローラオブジェクトにオブジェクトを挿入する方法

[Inject] 
public IDbContext DataContext { get; set; } 

:ここ

は後ろに私のコードのために私のコードです。 Ninject 3.0にアップデートするまでうまくいきました。

マイstartメソッドは次のとおりです。

public static void Start() 
{ 
    DynamicModuleUtility.RegisterModule(typeof(OnePerRequestHttpModule)); 
    DynamicModuleUtility.RegisterModule(typeof(NinjectHttpModule)); 
    Bootstrapper.Initialize(CreateKernel); 
} 

Ninjectは、WebフォームへとカミソリによってインスタンスのクラスにDataContextのを注入作る方法上の任意のアイデア?

あなたが Ninject.Web NuGetを(この記事の執筆時点での最新バージョンは3.0.0.5です)をインストールして、あなたのWebフォームを持っている必要があり、これが機能するために
+0

ASP.NET MVCアプリケーションでファイルの背後にコードがあるのはなぜですか? –

+0

サイト全体をMVCにまだ移行していません。これはWebFormsに完全に含まれていましたが、いくつかのWebFormsページが残っています。 –

+0

しかし、いくつかのレガシーコードがあれば、なぜそれを変更していますか?なぜあなたはそれに依存性を注入しようとしていますか?これをそのまま使用し、徐々に移行してみませんか? –

答えて

1

Ninject.Web.PageBase代わりのSystem.Web.UI.Pageから派生:また

public partial class WebForm1 : Ninject.Web.PageBase 
{ 
    [Inject] 
    public IDbContext Ctx { get; set; } 

    protected void Page_Load(object sender, EventArgs e) 
    { 
    } 
} 

あなたが隠しているSystem.Web.UI.Pageクラスに既にContextというプロパティがあるので、プロパティ名としてCtxを使用したことに注目してください(コンパイル時の警告が表示されているはずです)。

+0

パーフェクト!これは完璧に機能しました。コンテキスト部分の名前付けで、顧客名を隠すように変更し、コンテキストが隠されているのを忘れてしまった。私の名前は[CustomerName] Contextです。私は質問でそれを変更します:) –

+0

これを遭遇する他の人のためだけに、App_Start.NinjectMVC3を既にお持ちの場合は、NinGetパッケージがNinject.Web用に作成するファイルも必要ありません。 –

関連する問題