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

时间:2017-01-04 23:19:20

标签: c# asp.net asp.net-mvc-5 unity-container

在我的ASP.net MVC应用程序中,我不断得到这个间歇性的黄色死亡屏幕(YSOD),错误是:

  

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

我知道它与Unity IoC有关,但我不确定究竟是什么。我的接口/类遵循明确定义的模式:

ISupplierService 将由 SupplierService 等实施。

UnityConfig.cs文件包含以下内容:

public static class UnityConfig
{
  public static void RegisterComponents()
  {
    var container = new UnityContainer();

    container.RegisterTypes(AllClasses.FromLoadedAssemblies(), WithMappings.FromMatchingInterface, WithName.Default);
    container.RegisterType<AccountController>(new InjectionConstructor());
    container.RegisterType<ManageController>(new InjectionConstructor());
    container.RegisterType(typeof(IRepository<>), typeof(GenericRepository<>));
    container.RegisterType<DbContext, PdContext>();
    DependencyResolver.SetResolver(new UnityDependencyResolver(container));
  }
}

在我的SupplierController.cs中,我有以下构造函数:

public class SupplierController : BaseController
{
  private readonly ISupplierService _supplierService;

  public SupplierController(ISupplierService supplierService)
  {
    if (supplierService == null)
    {
      throw new ArgumentNullException(nameof(supplierService));
    }

    _supplierService = supplierService;
  }
}

1 个答案:

答案 0 :(得分:0)

我现在看到了问题。

您的实现类SupplierService没有实现接口ISupplierService

您可以将ISupplierService添加到类声明中,或让BaseController实现ISupplierService

public class SupplierController : BaseController, IServiceSupplier
{
  //.
  //.
  //.
}

一段时间后回到项目中,我刚刚意识到了同样的错误...:)