2012-04-04 10 views
0

私は.NET MVCとNinjectの両方の初心者です。Ninject/.NET MVC3 - スコープ?

ここで私のNinjectカーネルを入手するには: Ninjectを使用します。

(...) NK = NinjectKernel.getInstance(); 
private Game getGameInstance() { 
    IGame iGame; 
    try 
    { 
     iGame = NK.Get<IGame>(DefaultGameName); 
    } 
    catch 
    { 
     NK.Bind<IGame>().To<Game>().InSingletonScope().Named(DefaultGameName) 
      .WithConstructorArgument("ColorChoiceCount", 12) 
      .WithConstructorArgument("CodeLength", 6) 
      .WithConstructorArgument("TurnsToBePlayed", 8) 
      .WithConstructorArgument("DoubleColorAllowed", true) 
      ; 
     iGame = NK.Get<IGame>(DefaultGameName); 
    } 
    return (Game)iGame; 
} 

私はゲームのオブジェクトがあることを意味し、再使用可能な使用中の「セッション」、になりたい:

public class NinjectKernel 
{ 
    private static IKernel _Instance = new StandardKernel(); 

    public static IKernel getInstance() 
    { 
      return _Instance; 
    } 
} 

は、ここで私は、私は再使用するオブジェクトのインスタンスを保存する方法です彼がサイトを離れる場合、このインスタンスは再び使用されません。しかし、現在の状況では、デバッグ中に、アプリケーションを閉じて再起動すると、私は以前の "セッション"のインスタンスを常に再取得します。 私はこれを望んでいないので、私は複数のユーザーのために同じインスタンスを取得しないかどうかを知りたいと思います。 (ユーザーは認証されていても認証されていなくてもかまいませんが、今はまったくありません)。

(また、私は確信しているので、1がなければならないが、これが機能するように、今の優先順位ではありません、そこのtry/catchを使用するよりも、私のより良いソリューションを提案することができる。)

はありがとうあなたの助けに。

答えて

0

これを行う必要はありません。 Ninject.MVC3をインストールするにはNugetを使用してください。これにより、MVC DependencyResolver APIを使用するようにプロジェクトが自動的にセットアップされ、NinjectMVC3.csファイルが作成され、マッピングが作成されます。

+0

Ninjectをインストールし、NinjectMVC3.cs以外のファイルを取得しました。とにかく私はまだ私の質問への答えに興味があります。 – TTT

+0

@ user1103990ファイルはApp_Start \ NinjectWebCommon.csです。 –

+0

@RubenBartelink - Ahh ..最近のNinject 3リリースで更新されたようです。 –

0
  1. あなたはMVC 3月4日とNinjectの使用のためのポストを追跡しやすいこの優れた&をチェックすることができます:http://dotnetfever.com/implementing-dependency-injection-in-asp-net-mvc-4-using-ninject-di-container/

  2. 私はあなたのWebアプリケーションを再設計し、「内ゲームオブジェクトを再利用しないようお勧めしますセッション"。その理由は、Webアプリケーションは「ステートレス」な設計であるため、複数のリクエストにわたるユーザーのデータを覚えていないはずです。ステートレスな性質は、Webアプリケーションのパフォーマンスとスケーラビリティの向上に役立ちます。

あなたのサイトにいる限り、1人のユーザーのゲームオブジェクトを覚えておく必要がある場合は、すべてのリクエストでゲームオブジェクトを構築してみてください。建物が非常に高価な場合(たとえばデータベースに接続する場合)、asp.netキャッシュを使用してオブジェクトを保存し、後で再利用できます。

つまり、ゲームオブジェクトを保存するためにNinjectではなくキャッシュを使用します。