msdn 上统一框架的此链接指出 “您希望能够在 Web 应用程序中跨回发缓存或持久化依赖项”
http://msdn.microsoft.com/en-us/library/dd203319.aspx#
我不确定上述所有陈述的含义。我正在寻找一个示例,我们如何使用 Unity 来做到这一点 - 不确定 Unity 将如何解决回发问题。它会在会话中保持依赖关系并将其取回吗?
msdn 上统一框架的此链接指出 “您希望能够在 Web 应用程序中跨回发缓存或持久化依赖项”
http://msdn.microsoft.com/en-us/library/dd203319.aspx#
我不确定上述所有陈述的含义。我正在寻找一个示例,我们如何使用 Unity 来做到这一点 - 不确定 Unity 将如何解决回发问题。它会在会话中保持依赖关系并将其取回吗?
我写了一个使用 Session 和 Cache 的简短示例。我创建了一个名为 incrementer 的测试类,这与我将类设为静态或至少是变量非常相似。RegisterInstance 用于单例解析
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());
}
希望对您有所帮助:
安德鲁
编辑:以下示例 cimply 使用 UnityContainer 的单例实例,如果您继续刷新页面,将看到它保留以前的值。
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());
}