0

我是 .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 更好的解决方案,因为我确信必须有一个,但由于它有效,所以现在不是优先事项。)

谢谢您的帮助。

4

2 回答 2

0

你不必做任何这些。只需使用 Nuget 安装 Ninject.MVC3。这将自动设置项目以使用 MVC DependencyResolver API,并将创建一个 NinjectMVC3.cs 文件来创建您的映射。

于 2012-04-04T15:48:18.793 回答
0
  1. 您可以查看这篇出色且易于遵循的帖子,了解 Ninject 与 MVC 3 / 4 的用法:http: //dotnetfever.com/implementing-dependency-injection-in-asp-net-mvc-4-using-ninject-di -容器/

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

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

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

于 2013-04-15T15:31:22.447 回答