我是.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更好的解决方案,因为我确定必须有一个,但是因为这有效,现在不是优先考虑。)
感谢您的帮助。
答案 0 :(得分:0)
您不必执行任何操作。只需使用Nuget即可安装Ninject.MVC3。这将自动设置项目以使用MVC DependencyResolver API,它将创建一个NinjectMVC3.cs文件来创建映射。
答案 1 :(得分:0)
你可以检查这个优秀的&amp;使用MVC 3/4的Ninject轻松关注帖子:http://dotnetfever.com/implementing-dependency-injection-in-asp-net-mvc-4-using-ninject-di-container/
我建议您重新设计您的网络应用程序,避免在“会话”中重复使用游戏对象。原因是Web应用程序被设计为“无状态”,这意味着它不会记住多个请求中的用户数据。无状态特性可以帮助您的Web应用程序获得更好的性能和更好的可伸缩性。
如果您确实需要记住一个用户的Game对象,只要他在您的站点中,那么尝试在每个请求上构建游戏对象。如果建筑物非常昂贵(例如连接到数据库),那么使用asp.net缓存来存储该对象以供以后重用。
总之,使用缓存,而不是Ninject来保存游戏对象。