如何检查Unity容器是否已解析单例类型?

时间:2011-10-15 11:36:19

标签: design-patterns wpf-controls unity-container

给出以下统一配置:

<register type="MyProgram.IListDetailsView, MyProgram"
            mapTo="MyProgram.ListDetailsView, MyProgram"
            name="Contacts List">
    <lifetime type="singleton"/>
</register>

我想按如下方式检查代码:

bool firstCall = !container.ContainsInstance("Contacts List"))

IListDetailsView  listDetailsView = container.Resolve<IListDetailsView>("Contacts List");

if(firstCall)
{  
// do some work on listDetailsView
}

是否有相当于这个(组成)ContainsInstance方法或其他方式来获取此状态数据?我想检查Unity引用一个实例,而不是该类型已经注册。

2 个答案:

答案 0 :(得分:0)

我希望我没有误解你的要求。但对我来说,似乎你想在创建一个视图实例时执行一些初始化工作。这通常使用构造函数完成。

您将观点注册为统一。这不会创建视图的实例。对视图类型的第一个解析请求使unity创建视图的新实例。因此,在视图初始化期间您所要做的就是在构造函数内部完成。

答案 1 :(得分:0)

我建议你做错了。应根据需要创建和销毁UI组件。如果你真的需要这样做,那么有一个静态布尔值,指示你的“执行一次”代码是否已经运行。再次,在构造函数中执行此操作。如果需要确保线程安全,则需要锁定构造函数。或者,您可以在静态视图中使用视图详细信息; .Net将确保仅在您第一次访问任何静态成员时运行。