Unity - 当前类型是一个接口,无法构造。你错过了类型映射吗?

时间:2016-07-07 14:39:44

标签: asp.net-mvc unity-container

我正在使用Unity Dependency Injection并且遇到了麻烦。我已经注册了我的接口和类:

container.RegisterType<IUserService, UserService>();

其中容器是IUnityContainer。

在我的控制器中,我有一个构造函数设置来接受IUserService参数,如下所示:

private readonly IUserService _service;

    public DependencyController(IUserService service)
    {
        _service = service;
    }

当页面上指向此控制器索引的链接被命中时,我收到以下错误:

“当前类型Converge.Service.Interfaces.IUserService是一个接口,无法构造。您是否缺少类型映射?”。不确定我可能会缺少什么。任何帮助是极大的赞赏?如果您需要更多信息,请告诉我们。

更新 这是UnityConfig类

public class UnityConfig
{
    private static readonly Lazy<IUnityContainer> Container = new Lazy<IUnityContainer>(() =>
    {
        var container = new UnityContainer();

        RegisterTypes(container);

        return container;
    });

    public static IUnityContainer GetConfiguredContainer()
    {
        return Container.Value;
    }

    private static void RegisterTypes(IUnityContainer container)
    {
        new ServiceInjection()
            .Inject(container);
    }
}

public class ServiceInjection
    {
        public void Inject(IUnityContainer container)
        {
            container.RegisterType<IUserService, UserService>();
        }
    }

2 个答案:

答案 0 :(得分:0)

好的,经过一番搜索和创建其他项目后,我发现了发生了什么。只是一个愚蠢的错误。我的ServiceInjection类是在一个单独的DLL中。当我通过包管理器添加Unity DI时,它在主项目和Injection dll中添加了一个App_Start文件夹。我忘了从ServiceInjection dll中删除App_Start文件夹和内容。删除该文件夹后,所有文件都按原样运行。

答案 1 :(得分:0)

我知道这已经过时了,但万一有其他人遇到这个问题 - 当我添加服务和管理员(以及它们的接口)时我得到了同样的错误,但是我没有注册这些接口依赖注入配置。如果出现此错误,请确保检查新接口是否实际被注入!