0

根据 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];
}
4

1 回答 1

0

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

要获得您想要的,您需要使用ContainerControlledLifetimeManager

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

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

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

于 2014-12-20T23:43:26.007 回答