【发布时间】:2012-04-23 04:20:54
【问题描述】:
我正在使用 MVVM 和 PRISM。在项目中,我有一个通用接口叫IFoo,其他模块应该实现这个接口并注册它。
// Common module
public interface IFoo { }
// Module1 module
public class Foo1 : IFoo { }
然后当我初始化 module1 时,我注册我的类型并导航。
_container.RegisterType<IFoo, Foo1>(new ContainerControlledLifetimeManager());
_container.RegisterType<Object, View1>("View1");
var module = new Uri("View1", UriKind.Relative);
_regionManager.RequestNavigate("MainRegion", module);
View1 构造函数包含 viewModel,这个视图模型在它的构造函数中有:
public ViewModel1(IFoo foo, IEventAggregator eventAggregator, IRegionManager regionManager)
{
...
}
到此为止,没关系。但后来,我需要从外部模块中获取 Foo1 。所以,我将另一个注册表设置为 Foo1 的映射名称:
_container.RegisterType<IFoo, Foo1>(new ContainerControlledLifetimeManager());
_container.RegisterType<IFoo, Foo1>("foo1", new ContainerControlledLifetimeManager());
没错,它对我有用,但我不喜欢将两个实例分开的想法。我只需要一个,并访问同一个实例。
有没有办法解决这种情况? 提前致谢。
无论如何,我附上一个 Zip,其中包含一个代表我的问题的演示。 http://www.mediafire.com/?feod8x0b952457e
【问题讨论】:
标签: c# mvvm prism unity-container ioc-container