【问题标题】:Unity -The current type is an interface and cannot be constructed. Are you missing a type mapping?unity - 当前类型为接口,无法构造。您是否缺少类型映射?
【发布时间】:2016-07-07 14:39:43
【问题描述】:

我正在使用 Unity 依赖注入,但遇到了麻烦。我已经像这样注册了我的接口和类:

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>();
        }
    }

【问题讨论】:

  • 请显示您的组合根目录中的代码(将容器绑定到 MVC 的启动代码)。
  • 你确定,方法Inject被调用了吗?看起来你的容器注册代码没有执行
  • 是的,它被调用了。踏入其中。

标签: asp.net-mvc unity-container


【解决方案1】:

我知道这是旧的,但万一其他人遇到这个 - 我在添加服务和管理器(以及它们的接口)时遇到同样的错误,但没有在我的依赖注入中注册这些接口配置。如果您收到此错误,请务必检查您的新接口是否实际被注入!

【讨论】:

    【解决方案2】:

    好的,经过一番搜索和创建其他项目后,我弄清楚了发生了什么。只是一个愚蠢的错误。我的 ServiceInjection 类在一个单独的 dll 中。当我通过包管理器添加 Unity DI 时,它在主项目和 Injection dll 中添加了一个 App_Start 文件夹。我忘记从 ServiceInjection dll 中删除 App_Start 文件夹和内容。删除该文件夹后,一切正常。

    【讨论】:

      猜你喜欢
      • 2012-04-30
      • 1970-01-01
      • 1970-01-01
      • 2023-03-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多