如何在具有构造函数的类上使用Unity实现DI - mvc?

时间:2017-08-22 12:54:04

标签: dependency-injection asp.net-mvc-5 unity-container

假设我有一个像这样的接口和类

public interface ILienholderBusinessService
    {
        string GetCoverage(IList<PolicyVinRequest> InputList);
    }

public class LienholderBusinessService : ILienholderBusinessService
    {
        public ILienholderPolicySearchDataService LienholderPolicySearchDataService { get; set; }

        public LienholderBusinessService(ILienholderPolicySearchDataService  LienholderPolicySearchDataService )
        {
            this.LienholderPolicySearchDataService =LienholderPolicySearchDataService ;
        }
        public string GetCoverage(IList<PolicyVinRequest> InputList)
        {
            return "my string";

        }
    }

我有一个像这样的控制器

 public class InsuranceVerificationPortalController : Controller
    {
        public ILienholderBusinessService LienholderBusinessService { get; set; }
        public InsuranceVerificationPortalController(ILienholderBusinessService LienholderBusinessService)
        {
            this.LienholderBusinessService = LienholderBusinessService;
        }
}

现在当我尝试在我的MVC中实现统一时,我得到像

这样的错误
  

你错过任何类型

如何在具有构造函数

的类上使用Unity实现DI

1 个答案:

答案 0 :(得分:1)

您必须为所有需要解析具体类型的接口注册映射。从发布的代码中可以ILienholderBusinessServiceILienholderPolicySearchDataService

container.RegisterType<ILienholderBusinessService, LienholderBusinessService>();
container.RegisterType<ILienholderPolicySearchDataService, LienholderPolicySearchDataService>();

ILienholderPolicySearchDataService的实现可能还取决于接口/抽象类(例如IRepository<T>)。如果是这种情况,那么也需要为这些人创建映射。

默认情况下,Unity将选择具有最多参数的构造函数,因此如果您需要选择其他构造函数,则可以使用InjectionConstructor。 e.g。

container.RegisterType<ILienholderPolicySearchDataService, LienholderPolicySearchDataService>(
    new InjectionConstructor(typeof(IRepository<Policy>)));