作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个具有相应ViewModel的WPF View 。所有实例都通过一个统一的容器解决。因为我使用的是 Prism ,所以需要两个独立的 View 实例,以将其添加到 View 注册到的两个不同区域中。如果我尝试将一个实例添加到两个区域中,则会得到一个
InvalidOperationException: Specified element is already the logical child of another element. Disconnect it first.
最佳答案
您想要的听起来像是ContainerControlledLifetime管理器的一个变体,它不维护单个实例,而是一个实例的集合。不幸的是,这不是内置的生命周期管理器之一。
您可以查看code for the ContainerControlledLifetimeManager并发现它非常简单。您的“SynchronizedGetValue”实现将始终返回null(向需要实例化新实例的容器发送信号)。您可以将ContainerControlledLifetimeManager子类化,然后重写该方法。
我已经写好了。我想我可以给你代码。 :)
public class ContainerTrackedTransientLifetimeManager :
ContainerControlledLifetimeManager
{
protected override object SynchronizedGetValue()
{
return null;
}
}
public class ContainerTrackedTransientLifetimeManager :
SynchronizedLifetimeManager, IDisposable
{
private ConcurrentCollection<object> values = new ConcurrentCollection<object>();
protected override object SynchronizedGetValue()
{
return null;
}
protected override void SynchronizedSetValue(object newValue)
{
values.Add(newValue);
}
public override void RemoveValue()
{
Dispose();
}
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
protected void Dispose(bool disposing)
{
var disposables = values.OfType<IDisposable>();
foreach(var disposable in disposables)
{
disposable.Dispose();
}
values.Clear();
}
关于mvvm - 是否有处置的TransientLifetimeManager,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5896612/
这是一个小问题,只是为了确保我正确理解 Unity。 我在 ASP.NET MVC 应用程序中使用 Unity,我注册了一个类型,如下所示: container.RegisterType(); 我在
我是一名优秀的程序员,十分优秀!