假设我有一个像这样的接口和类
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答案 0 :(得分:1)
您必须为所有需要解析具体类型的接口注册映射。从发布的代码中可以ILienholderBusinessService
和ILienholderPolicySearchDataService
:
container.RegisterType<ILienholderBusinessService, LienholderBusinessService>();
container.RegisterType<ILienholderPolicySearchDataService, LienholderPolicySearchDataService>();
ILienholderPolicySearchDataService
的实现可能还取决于接口/抽象类(例如IRepository<T>
)。如果是这种情况,那么也需要为这些人创建映射。
默认情况下,Unity将选择具有最多参数的构造函数,因此如果您需要选择其他构造函数,则可以使用InjectionConstructor
。 e.g。
container.RegisterType<ILienholderPolicySearchDataService, LienholderPolicySearchDataService>(
new InjectionConstructor(typeof(IRepository<Policy>)));