Ninject / .NET MVC3 - 范围?

时间:2012-04-04 15:26:49

标签: asp.net-mvc asp.net-mvc-3 ninject

我是.NET MVC和Ninject的初学者。

这是我如何获得我的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;
}

我希望Game对象可以在一个使用“会话”中重复使用,这意味着如果他离开该站点,则该实例将不再被使用。但在目前的情况下,在调试时,当我关闭应用程序并重新启动它时,我总是重新获取我之前“会话”的实例。 我还想知道我是否会为多个用户获取相同的实例,因为我不想这样做。 (用户可能会或可能不会被认证,现在他们根本不会)。

(你也可以建议我使用一个比使用try / catch更好的解决方案,因为我确定必须有一个,但是因为这有效,现在不是优先考虑。)

感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

您不必执行任何操作。只需使用Nuget即可安装Ninject.MVC3。这将自动设置项目以使用MVC DependencyResolver API,它将创建一个NinjectMVC3.cs文件来创建映射。

答案 1 :(得分:0)

  1. 你可以检查这个优秀的&amp;使用MVC 3/4的Ninject轻松关注帖子:http://dotnetfever.com/implementing-dependency-injection-in-asp-net-mvc-4-using-ninject-di-container/

  2. 我建议您重新设计您的网络应用程序,避免在“会话”中重复使用游戏对象。原因是Web应用程序被设计为“无状态”,这意味着它不会记住多个请求中的用户数据。无状态特性可以帮助您的Web应用程序获得更好的性能和更好的可伸缩性。

  3. 如果您确实需要记住一个用户的Game对象,只要他在您的站点中,那么尝试在每个请求上构建游戏对象。如果建筑物非常昂贵(例如连接到数据库),那么使用asp.net缓存来存储该对象以供以后重用。

    总之,使用缓存,而不是Ninject来保存游戏对象。