2009-03-07 24 views
0

msdn üzerinde birlik çerçevesi için bu bağlantıBir Web uygulamasında Bağımlılıklar aracılığıyla bağımlılıkları bağımlılık nasıl kalıcı hale getirir?

http://msdn.microsoft.com/en-us/library/dd203319.aspx#

emin değilim "Bir Web uygulamasında geri göndermeler karşısında bağımlılıklar önbelleğe veya devam edebilmek istiyorum" Ne dediğini bütün Yukarıdaki deyim anlamına gelir. Unity'yi kullanarak bunu nasıl yapabileceğimizi bir örnek arıyorum - Unity'nin geri bildirimleri nasıl çözeceğinden emin değilim. Sadece oturumda bağımlılığı sürdürecek ve geri alacak mı?

cevap

1

Oturum kullanarak ve ayrıca Önbellek kullanarak kısa bir örnek yazdım. Sınıfı statik ya da en azından değişken yaparsam çok benzer bir artış sınıfı denilen bir test sınıfı oluşturdum. Aşağıdaki örnek cimply UnityContainer bir tekil örneğini kullanır ve sürekli yenilemeniz durumunda sayfayı göreceksiniz:

DÜZENLEME

Andrew

: Bir Singleton

public class Incrementer 
{ 
    private int count; 

    private object synclock = new object(); 

    public int GetCount() 
    { 
     return count; 
    } 

    public void Increment() 
    { 
     System.Threading.Monitor.Enter(synclock); 
     count++; 
     System.Threading.Monitor.Exit(synclock); 
    } 
} 

public IUnityContainer SessionUnityContainer 
{ 
    get 
    { 
     if (Session["SharedIncrementer"] == null) 
     { 
      IUnityContainer container = new UnityContainer(); 
      container.RegisterInstance<Incrementer>(new Incrementer()); 
      Session["SharedIncrementer"] = container; 
     } 
     return Session["SharedIncrementer"] as IUnityContainer; 
    } 
} 

public IUnityContainer CacheUnityContainer 
{ 
    get 
    { 
     if (Cache["SharedIncrementer"] == null) 
     { 
      IUnityContainer container = new UnityContainer(); 
      container.RegisterInstance<Incrementer>(new Incrementer()); 
      Cache["SharedIncrementer"] = container; 
     } 
     return Cache["SharedIncrementer"] as IUnityContainer; 
    } 
} 

protected void Page_Load(object sender, EventArgs e) 
{ 
    Incrementer i1 = SessionUnityContainer.Resolve<Incrementer>(); 
    Incrementer i2 = CacheUnityContainer.Resolve<Incrementer>(); 

    for (int i = 0; i < 10; i++) 
     i1.Increment(); 

    for (int i = 0; i < 5; i++) 
     i2.Increment(); 

    Response.Write(i1.GetCount().ToString()); 
    Response.Write(i2.GetCount().ToString()); 
} 

Umut üreterek bu Çöz için RegisterInstance yardımcı olur önceki değerlerin devam etmesi.

public class Incrementer 
{ 
    private int count; 

    private object synclock = new object(); 

    public int GetCount() 
    { 
     return count; 
    } 

    public void Increment() 
    { 
     System.Threading.Monitor.Enter(synclock); 
     count++; 
     System.Threading.Monitor.Exit(synclock); 
    } 
} 

public static class ExampleSettings 
{ 
    private static IUnityContainer container = null; 

    public static IUnityContainer Container 
    { 
     get 
     { 
      if (container == null) 
      { 
       container = new UnityContainer(); 
       container.RegisterInstance<Incrementer>(new Incrementer()); 
      } 
      return container; 
     } 
    } 
} 

protected void Page_Load(object sender, EventArgs e) 
{ 
    Incrementer i1 = ExampleSettings.Container.Resolve<Incrementer>(); 

    for (int i = 0; i < 10; i++) 
     i1.Increment(); 

    Response.Write(i1.GetCount().ToString()); 
} 
+0

Örnek Andrew için teşekkürler. Benim önsezim msdn ile ilgili bu ifadede yer alıyor - birlik, postback'ler arasında PERSISTING bağımlılığında nasıl yardımcı oluyor? Sadece oturumda bir şey koyabiliriz ve geri gönderimler boyunca devam edebiliriz. Birliğin, bizim için bağımlılığı çözdüğünü kabul ediyorum :) – dotnetcoder

+0

Msnd, Unity'yi kullanmanın nedenlerinden birinin şu olduğunu belirtiyor: "Bir Web uygulamasında geri göndermeler boyunca bağımlılıkları önbelleğe almak veya sürdürmek istiyorsanız" – dotnetcoder

+0

Bunu test edin. bir demo depo sınıfını ilan edin ve Container adında bir Singleton Özelliği bildirin. Birlik kabının örneğini döndür. Daha sonra önbellek oturumuna ihtiyacınız yoktur, kendi uygulamasını kullanacaktır. –

İlgili konular