【发布时间】:2014-12-04 16:35:06
【问题描述】:
第一次使用 MS Unity。我有一个带有以下构造函数的控制器:
protected IAdministrationService AdministrationService { get; set; }
public GenerateCacheController(IAdministrationService administrationService)
{
AdministrationService = administrationService;
}
尝试运行项目时出现以下错误:
确保控制器有一个无参数的公共构造函数。
在我的 Bootstrpper.cs 文件中,RegisterTypes 方法中有以下内容:
container.RegisterType<GenerateCacheController>();
我仍然得到错误。我还缺少什么吗?我正在使用 ASP.NET MVC 5 和 Unity 3。
这是我的 Boostrapper.cs 文件:
public static class Bootstrapper
{
public static IUnityContainer Initialise()
{
var container = BuildUnityContainer();
DependencyResolver.SetResolver(new UnityDependencyResolver(container));
return container;
}
private static IUnityContainer BuildUnityContainer()
{
var container = new UnityContainer();
RegisterTypes(container);
return container;
}
public static void RegisterTypes(IUnityContainer container)
{
container.RegisterInstance(container);
var im = new InjectionMember[0];
container.RegisterType<IAdministrationService, AdministrationService>("AdministrationService", im);
container.RegisterType<ILookupMapper, LookupMapper>("LookupMapper", im);
container.RegisterType<IEmailService, EmailService>("EmailService", im);
container.RegisterType<GenerateCacheController>();
var provider = new UnityServiceLocator(container);
ServiceLocator.SetLocatorProvider(() => provider);
}
}
AdministrationService 类的缩略版:
public class AdministrationService : IAdministrationService
{
protected ILookupMapper LookupMapper { get; set; }
protected IEmailService EmailService { get; set; }
public AdministrationService(ILookupMapper lookupMapper, IEmailService emailService)
{
LookupMapper = lookupMapper;
EmailService = emailService;
}
}
【问题讨论】:
-
添加一个无参数的公共构造函数?
-
@Selman22 - 这不是正确的答案。发生错误是因为 MS unity 没有将任何东西“注入”到构造函数中,这是它应该做的(并消除了对无参数构造函数的需要)。但是,我只有 Ninject 而不是 Unity 的经验,所以我无法判断 OP 的配置有什么问题
-
显示您的
AdministrationService课程。 -
是否使用同一个容器实例进行解析?
-
Bootstrapper.Initialise()何时被调用?这应该在Application_Start中(高于一切)或使用WebActivatorExPreApplicationStart连接起来。
标签: c# asp.net-mvc asp.net-mvc-5 unity-container