Tôi đang xây dựng một ứng dụng MVC3 bằng cách sử dụng khung công tác Ninject. Tôi có một dịch vụ tốn nhiều thời gian để khởi tạo và cuối cùng dịch vụ này sẽ có một đối tượng chứa thông tin người dùng cụ thể, sau đó tôi cần phải sử dụng lại dịch vụ đó miễn là phiên người dùng đang hoạt động, để tôi có thể tránh để khởi tạo dịch vụ mà một lần nữa và một lần nữaKhái niệm phạm vi phiên Ninject trong MVC3
vì vậy, câu hỏi của tôi là
Khi tôi liên kết các dịch vụ sử dụng Ninject loại phạm vi tôi nên lựa chọn, không có phiên mỗi phạm vi trong Ninject, vì vậy tốt nhất là gì cách để thực hiện yêu cầu? hay tôi đã đi sai hướng?
Tôi đã tạo nhà cung cấp tùy chỉnh cho một trong các dịch vụ của mình sẽ tạo dịch vụ dựa trên chi tiết tên người dùng được lấy từ Controller.User.Identity.Name hiện tại. Mã bên dưới sẽ không hoạt động vì biến cục bộ userName bị thiếu, làm cách nào tôi có thể chuyển giá trị tên người dùng vào nhà cung cấp tùy chỉnh của tôi qua Ninject, để tôi có thể nhận nó từ 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
};
}
}
}
}
Xem thêm http: // stackoverflow.com/questions/4687707/ninject-per-session-singleton –