对于Windows Phone应用程序,多个用户可以登录/注销,我希望确保在新用户登录时永远不会重复使用在一个用户范围内创建的对象(并为该用户重用),即。我需要擦除内部状态。
对于Ninject如何做到这一点有什么好的做法吗?我能找到的就是创建一个自定义范围对象,这对我来说似乎有点难看:
public sealed class UserScopeObject
{
}
public sealed class UserScope
{
public static UserScopeObject Current { get; set; }
}
Bind<IFoo>().To<Foo>().InScope(x => UserScope.Current);
然后每当用户登录/注销时:
UserScope.Current = new UserScopeObject();
答案 0 :(得分:1)
如果您在用户登录时没有重新创建对象图,则范围不会对您有所帮助。它无法偷窃&#34;来自某个非用户特定对象的特定于用户的对象。
因此,您需要重新创建对象树。如果你这样做,你甚至需要一个范围?您是否可以在注销时不引用树的用户特定部分,并在登录时重新创建它?
只有当你需要像每个用户一样的单身人士时才需要它#34;如果是这样,您可以使用像您一样的自定义用户范围(提示:您可以UserScopeObject : INotifyWhenDisposed
让Ninject在UserScopeObject
处置后尽快释放所有范围对象),或者您也可以使用其他范围,如命名范围(参见Named Scope Extension)。
如果您在用户签名时重新创建对象树的一部分,则可以拥有特定于用户的根节点DefinesNamedScope("User")
以及所有可以使用的对象。是短暂的/需要是&#34;单身&#34;关于用户可以定义.InNamedScope("User")
。
也许你甚至可以达到你想要的效果&#34; InCallScope()&#34;。