私はASP.Netでシングルトンについて読んできましたが、私はさまざまな実装や提案を見てきました。 https://stackoverflow.com/...asp-net-singletonASP.Netセッションでの静的なシングルトン
ここに私の質問があります:私は現在のセッションの生存期間をインスタンス化しているが、セッション間で共有されていないオブジェクトを希望します。たとえば、2人のユーザーが同時にログインしている場合、グローバルオブジェクトのインスタンスをそれぞれ「所有する」ようにします。以下は私の実装です。これを行うには適切な方法ですか?
public class AppGlobal
{
#region Contructors
public AppGlobal() { }
public static AppGlobal Instance
{
get
{
HttpSessionState session = HttpContext.Current.Session;
if (session["AppGlobalInstance"] == null)
{
session["AppGlobalInstance"] = new AppGlobal();
}
return (AppGlobal)session["AppGlobalInstance"];
}
}
#endregion
#region Public Properties
public User UserObject { get; set; }
public Campaign CampaignObject { get; set; }
public List<int> SelectedContactIDs = new List<int>();
public List<int> UnsubmittedContactIDs = new List<int>();
public List<int> SubmittedContactIDs = new List<int>();
public List<int> ProcessedContactIDs = new List<int>();
#endregion
#region Public Instance Methods
public void ClearCampaign()
{
CampaignObject = null;
UnsubmittedContactIDs.Clear();
SubmittedContactIDs.Clear();
ProcessedContactIDs.Clear();
SelectedContactIDs.Clear();
}
public void LoadCampaign(int campaignID)
{
//Ensure that old data is overwritten
MailCampaignManagerEntities db = new MailCampaignManagerEntities();
db.Campaigns.MergeOption = System.Data.Objects.MergeOption.OverwriteChanges;
//Clear the campaign and associated data
ClearCampaign();
//Set campaign object in AppGlobal
this.CampaignObject = db.Campaigns.SingleOrDefaultasp.net(x => x.CampaignID == campaignID);
//Populate Contact Status Lists
this.UnsubmittedContactIDs.AddRange(from x in this.CampaignObject.CampaignContacts
where x.ContactSubmissionID == null
select x.CampaignContactID);
this.SubmittedContactIDs.AddRange(from x in this.CampaignObject.CampaignContacts
where x.ContactSubmissionID != null
select x.CampaignContactID);
this.ProcessedContactIDs.AddRange(from x in this.CampaignObject.CampaignContacts
where x.ContactSubmissionID != null
&& x.ContactSubmission.DateProcessed != null
select x.CampaignContactID);
}
#endregion
#region Public Static Methods
public static void WriteLogEntry(int? campaignID, int? contactSubmissionID, int? scheduledDropID, int? userID, string activityDescription)
{
ActivityLog activityLog = new ActivityLog();
activityLog.CampaignID = campaignID;
activityLog.ContactSubmissionID = contactSubmissionID;
activityLog.ScheduledDropID = scheduledDropID;
activityLog.UserID = userID;
activityLog.Text = activityDescription;
activityLog.CreatedDate = DateTime.Now;
using (MailCampaignManagerEntities db = new MailCampaignManagerEntities())
{
db.ActivityLogs.AddObject(activityLog);
db.SaveChanges();
}
}
#endregion
}
冗長な回答をいただきありがとうございます。 –