我正在使用Ninject框架構建MVC3應用程序。我有一個耗時的初始化服務,最後這個服務將有一個包含用戶特定信息的對象,那麼只要用戶會話處於活動狀態,我就需要重新使用該服務,以便我可避免再次初始化服務,並再次MVin3中的Ninject會話範圍概念
所以我的問題是
當我綁定使用Ninject我應該選擇什麼樣的範圍內的服務,有在Ninject每範圍沒有會話,那麼什麼是最好的實施要求的方式?還是我根本走錯了方向?
我創建了一個自定義提供爲我服務,這將創建一個基於從當前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
};
}
}
}
}
也參看:http完成。com/questions/4687707/ninject-per-session-singleton –