2012-04-04 51 views
0

我是.NET MVC和Ninject的初學者。Ninject/.NET MVC3 - 範圍?

這裏我如何得到我的Ninject內核: 使用Ninject;

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

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

下面是如何保存對象的實例,我想重新使用:

(...) 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; 
} 

我想是可重複使用的遊戲對象使用「會話」,這意味着內如果他離開該網站,這個實例將不會再被使用。但在目前情況下,在調試時,當我關閉應用程序並重新啓動應用程序時,我總是重新獲得先前「會話」的實例。 我也想知道,如果我不會爲多個用戶獲得相同的實例,因爲我不想要這個。 (用戶可能會或可能不會被驗證,現在他們根本沒有)。

(您也可以推薦一個更好的解決方案比使用一個try/catch那裏,因爲我敢肯定,必須有一個,但這個工程是不是一個優先事項現在。)

謝謝您的幫助。

回答

0

你不必這樣做。只需使用Nuget安裝Ninject.MVC3即可。這會自動設置項目以使用MVC DependencyResolver API,並且它將創建一個NinjectMVC3.cs文件來創建映射。

+0

我已經安裝了Ninject並獲得了非NinjectMVC3.cs文件。無論如何,我仍然對我的問題的答案感興趣。 – TTT 2012-04-04 16:08:13

+0

@ user1103990該文件是App_Start \ NinjectWebCommon.cs – 2012-04-04 19:37:15

+0

@RubenBartelink - 啊..看起來這是在最近的Ninject 3版本中更新的。 – 2012-04-04 20:49:43

0
  1. 你可以檢查這個優秀&容易跟隨職位Ninject與MVC 3使用/ 4:http://dotnetfever.com/implementing-dependency-injection-in-asp-net-mvc-4-using-ninject-di-container/

  2. 我建議你重新設計你的web應用程序,並避免內重複使用的遊戲對象了「會話」。原因是Web應用程序設計爲「無狀態」,這意味着它不會記住用戶的多個請求數據。無狀態本質可以幫助您的Web應用程序獲得更好的性能和更好的可伸縮性。

如果您確實需要記住一個用戶的Game對象,只要他在您的網站中,則嘗試在每個請求上構建遊戲對象。如果建築物非常昂貴(連接到數據庫,例如),那麼使用asp.net緩存來存儲對象以備後用。

總之,使用緩存,而不是Ninject來保存遊戲對象。