我有以下界面和实现
namespace ProjectName.Web
{
public interface IWebUtil
{
}
}
namespace ProjectName.Web
{
public class WebUtil : IWebUtil
{
}
}
在我的配置中我有这个注册。我正在使用Unity 3。
<unity xmlns="http://schemas.microsoft.com/practices/2010/unity">
<assembly name="ProjectName.Web" />
...
<register name="WebUtil" type="ProjectName.Web.IWebUtil" mapTo="ProjectName.Web.WebUtil">
<lifetime type="transient" />
</register>
...
当我尝试解析此配置时,我收到此错误:
Exception is: InvalidOperationException - The type IWebUtil does not have an accessible constructor.
-----------------------------------------------
At the time of the exception, the container was:
Resolving ProjectName.Web.IWebUtil,(none)
我试图添加空公共构造函数但没有成功。
有人可以帮忙吗?感谢。
答案 0 :(得分:2)
第一步是确保您正在加载Unity配置,因为默认情况下不会这样做。要做到这一点:
using Microsoft.Practices.Unity.Configuration;
container.LoadConfiguration();
我假设你已经这样做了。我还将假设您正在尝试使用以下代码解析IWebUtil:
container.Resolve<IWebUtil>();
这会抛出InvalidOperationException,因为IWebUtil被配置为命名注册(名称为“WebUtil”)。因此,要么使用配置的名称解析:
container.Resolve<IWebUtil>("WebUtil");
或者将注册更改为默认(未命名)注册:
<register name="" type="ProjectName.Web.IWebUtil" mapTo="ProjectName.Web.WebUtil">
<lifetime type="transient" />
</register>