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

Design patterns 如何检查Unity容器是否已解析单例类型?,design-patterns,wpf-controls,unity-container,Design Patterns,Wpf Controls,Unity Container,给定以下unity配置: <register type="MyProgram.IListDetailsView, MyProgram" mapTo="MyProgram.ListDetailsView, MyProgram" name="Contacts List"> <lifetime type="singleton"/> </register> 我想执行以下签入代码: bool firstCal

给定以下unity配置:

<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
}
bool firstCall=!container.ContainsInstance(“联系人列表”))
IListDetailsView=container.Resolve(“联系人列表”);
如果(第一次呼叫)
{  
//在listDetailsView上做一些工作
}

是否有一种等效于此(虚构)ContainsInstance方法或其他方法来获取此状态数据?我想检查Unity引用实例,而不是类型是否已注册。

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


你登记你对统一的看法。这不会创建视图的实例。视图类型的第一个解析请求使unity创建视图的新实例。因此,在视图初始化过程中所要做的一切都可以在构造函数内部完成。

我认为您做错了什么。应根据需要创建和销毁UI组件。如果您确实需要这样做,那么使用一个静态布尔值来指示“do once”代码是否已运行。同样,在构造函数中执行此操作。如果需要确保线程安全,则需要锁定构造函数。或者,您可以在静态ctor中执行查看详细信息的工作。Net将确保在您第一次访问任何静态成员时只运行一次

请告诉我们您为什么想知道是否已经解决了单例问题。谢谢,但是特定的(视图)类是用于多个不同视图的基类,因此我不能使用其构造函数,因为它只能构造一个特定视图。我的想法是基于这个基类构建各种视图,例如contacts视图,将各种用户控件插入基类(包含一个包含3列的网格)。当它是基类时,您不需要实例化它。然后,所有代码都可以进入派生类的构造函数中。对不起,PVitt,我的意思是编写模板而不是基类(尽管我发现这个问题时无法编辑我的注释)。因此,所有不同的视图都是插入到这个模板类(包含一个网格)中的用户控件。我认为您必须提供更多细节才能回答您的问题。请尝试从头重写您的问题并描述您的问题,这不是一个可能的解决方案。好主意,我在unity中重写了问题,每个命名类型都有一个单独的问题(“联系人列表”,但也有其他类型)-因此ListDetailsView本身不是一个单独的问题,因为它有多个实例;因此,很遗憾,我们无法在ListDetailsView的构造函数中完成这项工作。谢谢Andy,我已经重新设计了联系人列表等,以便从ListDetailsView派生,然后我可以使用它们的构造函数。