【问题标题】:How to share an implementation of the interface using prism?如何使用棱镜共享接口的实现?
【发布时间】:2014-12-21 07:43:26
【问题描述】:

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

我为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];
}

【问题讨论】:

  • 如何注册你的注入构造函数?

标签: wpf unity-container prism prism-5


【解决方案1】:

我认为您误解了文档 - 使用 RegisterInstance 意味着将返回注册接口的相同实现,而不是相同的具体实例

要得到你想要的,你需要使用ContainerControlledLifetimeManager

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

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

另外,只是为了挑剔-我建议您更改IBQuoteSource的名称-它是一个实际的类,而不是一个接口,因此理想情况下它不应该在类名的前面加上一个大写的I

【讨论】:

  • 你确定ContainerControlledLifetimeManager ,因为我认为这是默认实现。而IB是Interactive Broker的简称~
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-26
  • 2020-07-25
  • 1970-01-01
  • 2021-12-05
  • 2011-09-09
相关资源
最近更新 更多