1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
| namespace DAL {
public class ObjectContextFactory {
/// <summary>
/// Clé pour sauvegarder le "ObjectContext"
/// </summary>
public const string CONTEXT_KEY_NAME = "ObjectContextSingleton";
/// <summary>
/// Récupérer le "ObjectContext" du Thread en cours
/// </summary>
/// <typeparam name="T"></typeparam>
/// <returns></returns>
public static T GetCurrentContext<T>() where T : new() {
// ObjectContext
T objectContext;
// Si dans un context web
if(HttpContext.Current != null) {
Page currentPage = (Page) HttpContext.Current.Handler;
if(currentPage == null) throw new NullReferenceException("Page is null");
if(currentPage.Items[CONTEXT_KEY_NAME] == null) currentPage.Items[CONTEXT_KEY_NAME] = new T();
objectContext = (T) currentPage.Items[CONTEXT_KEY_NAME];
}
// Sinon
else {
objectContext = (T) CallContext.GetData(CONTEXT_KEY_NAME);
if(objectContext == null) {
objectContext = new T();
CallContext.SetData(CONTEXT_KEY_NAME, objectContext);
}
}
// Retourne le "ObjectContext"
return objectContext;
}
}
} |
Partager