gpt4 book ai didi

c# - MVC3 中的 Ninject session 范围概念

转载 作者:太空狗 更新时间:2023-10-29 18:29:43 25 4
gpt4 key购买 nike

我正在使用 Ninject 框架构建 MVC3 应用程序。我有一个初始化很耗时的服务,最后这个服务会有一个包含用户特定信息的对象,那么只要用户 session 处于事件状态,我就需要重新使用该服务,这样我可以避免一次又一次地初始化该服务

所以我的问题是

当我使用 Ninject 绑定(bind)服务时,我应该选择什么样的范围,Ninject 中没有每个范围的 session ,那么实现需求的最佳方法是什么?还是我完全走错了方向?

我为我的一项服务创建了一个自定义提供程序,它将根据从当前 Controller.User.Identity.Name 中获取的用户名详细信息创建服务。下面的代码将无法运行,因为缺少 userName 局部变量,我如何通过 Ninject 将用户名值传递到我的自定义提供程序中,以便我可以从 IContext 中获取它?

public class TfsConnectionManagerProvider : Provider<TfsConnectionManager>
{
protected override TfsConnectionManager CreateInstance(IContext context)
{
Uri serverUri = new Uri(ConfigurationHelper.TfsServerUrl);
// Connect to the server without impersonation
using (TfsTeamProjectCollection baseUserConnection = TfsTeamProjectCollectionFactory.GetTeamProjectCollection(serverUri))
{
// Get the identity management service
IIdentityManagementService ims = baseUserConnection.GetService<IIdentityManagementService>();

// Get the identity to impersonate
TeamFoundationIdentity identity = ims.ReadIdentity
(
IdentitySearchFactor.AccountName,
userName, //NOTE: How can I get user name value from IContext???
MembershipQuery.None,
ReadIdentityOptions.None
);

// Connect using the impersonated identity
using (TfsTeamProjectCollection impersonatedConnection = new TfsTeamProjectCollection(serverUri, identity.Descriptor))
{
WorkItemStore store = impersonatedConnection.GetService<WorkItemStore>();

return new TfsConnectionManager
{
Store = store
};
}
}
}
}

最佳答案

Ninject 有意不提供 session 范围,因为在几乎所有情况下,在 session 状态下提供服务都是错误的。您应该非常小心地使用 session 状态,因为它会带来很多缺点。

首先尝试使用无状态应用程序。

如果在 session 范围内有一个很好的理由,那么将数据(而不是服务)放入 session 状态,并使用单例、 transient 或请求范围内的服务进行处理(数据和功能分离) .

关于c# - MVC3 中的 Ninject session 范围概念,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10445221/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com