我想在我正在学习的项目中使用Unity作为IoC容器。我有一个分层应用程序,UI-> Service-> Logic-> DataAccess。Unity容器无法解析我的课
这是一个在UI端的MVC应用程序。
在我的控制,我有一个构造函数:
public HomeController()
{
_container = new UnityContainer();
_container.RegisterType<IUserService, UserService>();
_container.RegisterType<IUserLogic, UserLogic>();
}
然后我尝试使用IService在我的方法之一:
var service = _container.Resolve<IUserService>();
ReplyDto reply = service.Login(model.Email, model.Password);
但后来得到这个错误:
Resolution of the dependency failed, type = "Services.IUserService", name = "(none)".
我不知道为什么这么说。我可能有MVC和构造函数的问题吗? Resolve行上的断点显示_container确实有我尝试解决的接口。
我UserService类有这样的构造:
private IUserLogic _userlogic;
public UserService(IUserLogic logic)
{
_userlogic = logic;
}
逻辑层类的定义是这样的:
public class UserLogic : IUserLogic
{
public ILog _logger;
public IData _data;
public UserLogic(IData data, ILog logger)
{
_data = data;
_logger = logger;
}
我仍然在通过所有传播的IoC拍打下来的过程层。
最后,数据访问层被定义为:
public class Data :IData
{
Log _logger = new Log();
MyEntities entities;
public Data()
{
entities = new MyEntities();
var instance = System.Data.Entity.SqlServer.SqlProviderServices.Instance;
}
我_container具有参照IUserLogic接口和其中使用的具体类。
团结有什么错误很默认的痕迹......既然你没有表现出[MCVE]人们不得不猜测'UserLogic'具有Unity无法使用的构造函数(或者由于缺少依赖或非接口参数)。 –
谢谢@Alexei - 我会研究你所指的。并在逻辑中发布我正在做的事情。 – Craig
@AlexeiLevenkov - 我已经为这个问题的所有图层添加了构造函数。该错误是否表明在尝试解析Service类时,它在下面的构造函数之一上失败了? – Craig