基于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];
}
答案 0 :(得分:0)
我认为你错误地使用了doco - 使用RegisterInstance意味着将返回已注册接口的相同实现,而不是相同的具体实例。
要获得所需内容,您需要使用ContainerControlledLifetimeManager:
container.RegisterInstance<IQuoteSource>( new IBQuoteSource()
, new ContainerControlledLifetimeManager()
);
(注意:未经测试的代码行!) 这将有效地将单例模式与您的容器一起使用 - 每次解析该接口时都会使用创建的初始实例。
另外,只是为了挑剔 - 我建议你更改IBQuoteSource
的名称 - 它是一个真正的类,而不是一个接口,所以理想情况下它不应该在前面加上一个大写I
班级名称。