【发布时间】:2016-01-18 22:06:13
【问题描述】:
我在使用 Unity 容器解析对象时遇到了异常:
消息“值不能为空。\r\n参数名称:容器” 来源“Microsoft.Practices.Unity”字符串
我有一个 Prism 应用程序,其中我有 ServiceModule。 ServiceModule只有接口及其实现:
public interface ICommonService
{
string SomeStorage { get; set; }
}
public class CommonService : ICommonService
{
string fooStorage=DateTime.Now.ToString();
public string FooStorage
{
get
{
return fooStorage;
}
set
{
fooStorage = value;
OnPropertyChanged("FooStorage");
}
}
}
我在 ModuleA 的 ViewModelA 中创建了 ICommonService 的单个实例。没问题:
unityContainer = new UnityContainer();
unityContainer.RegisterType<ICommonService, CommonService>(new ContainerControlledLifetimeManager());
IMyService someFoo = unityContainer.Resolve<ICommonService>();
someFoo.FooStorage = "AAAOOOBBB";
然后我想在 ModuleB 的 viewModelB 中读取这些数据。并且这段代码抛出了一个异常:
ICommonService someFoo = unityContainer.Resolve<ICommonService>();
string str=someFoo.FooStorage;
异常说:
消息“值不能为空。\r\n参数名称:容器” 来源“Microsoft.Practices.Unity”字符串
我做错了什么?任何帮助将不胜感激!
【问题讨论】:
-
什么是
IMyService和MyService? -
是
ICommonyService还是IMyService? -
在
viewModelB,如何获取容器的实例?unityContainer的值为 null 吗?可以调试验证吗?
标签: c# wpf inversion-of-control unity-container prism