using System;
using System.Collections.Generic;
namespace DependencyInjection
{
class Program
{
static void Main(string[] args)
{
PrintContextTitle();
using (new MyNestedContext("outer scope"))
{
PrintContextTitle();
using (new MyNestedContext("inner scope"))
{
PrintContextTitle();
}
PrintContextTitle();
}
PrintContextTitle();
Console.ReadKey();
}
static void PrintContextTitle()
{
Console.WriteLine("Current Context is {0}", MyNestedContext.Current != null ? MyNestedContext.Current.Title : "null");
}
}
public class MyNestedContext : IDisposable
{
private static Stack<MyNestedContext> scopeStack = new Stack<MyNestedContext>();
public string Title { get; set; }
public MyNestedContext(string title)
{
Title = title;
scopeStack.Push(this);
}
public static MyNestedContext Current {
get {
if (scopeStack.Count == 0)
return null;
return scopeStack.Peek();
}
}
public void Dispose()
{
scopeStack.Pop();
}
}
}
30 Kasım 2018
The Ambient Context Design Pattern in .NET
The Ambient Context Design Pattern in .NET