如何使用棱镜共享接口的实现?

时间:2014-12-20 23:12:15

标签: wpf unity-container prism prism-5

基于MSDN,如果使用RegisterInstance方法注册了对象的现有实例,则容器会为Resolve或ResolveAll的所有调用返回相同的实例,或者当依赖机制将实例注入其他类时。 / p>

我为dataService图层创建了一个项目并使用了

container.RegisterInstance<IQuoteSource>(new IBQuoteSource());

我希望每当我需要IQuoteSource时,在应用程序的生命周期内只创建一个实例。 但是在我使用构造函数中的接口的另一个项目程序集中,发生了什么是另一个IBQuoteSource被创建。(正如我可以看到IBQuoteSource的构造函数再次被调用)所以如何共享一个实现整个应用程序的界面?

public ClickViewModel( IQuoteSource quoteSource)
{
    this.quoteSource = quoteSource;
    ComboItems = new List<string>() { "GTC Order", "Day Order" };
    SelectedComBoItem = ComboItems[1];
}

1 个答案:

答案 0 :(得分:0)

我认为你错误地使用了doco - 使用RegisterInstance意味着将返回已注册接口的相同实现,而不是相同的具体实例

要获得所需内容,您需要使用ContainerControlledLifetimeManager

container.RegisterInstance<IQuoteSource>( new IBQuoteSource()
                                        , new ContainerControlledLifetimeManager()
                                        ); 

(注意:未经测试的代码行!) 这将有效地将单例模式与您的容器一起使用 - 每次解析该接口时都会使用创建的初始实例。

另外,只是为了挑剔 - 我建议你更改IBQuoteSource的名称 - 它是一个真正的类,而不是一个接口,所以理想情况下它不应该在前面加上一个大写I班级名称。