1
我遇到了一个问题,除非在控制器中有一个空白的默认构造函数,否则ninject不会工作。我在我的app_start在NinjectWebCommon.cs绑定注册类似如下:Ninject ASP.NET MVC没有默认的构造函数
private static void RegisterServices(IKernel kernel)
{
kernel.Bind<IServices.IAccountProvider>().To<Providers.Account.Service.AccountProvider>();
kernel.Bind<IServices.IContractProvider>().To<Providers.Contract.ContractProvider>();
kernel.Bind<IServices.IProductProvider>().To<Providers.Product.ProductProvider>();
kernel.Bind<IServices.IChannelProvider>().To<Providers.Channel.ChannelProvider>();
kernel.Bind<IServices.ITaskProvider>().To<Providers.Task.TaskProvider>();
kernel.Bind<IServices.IExportProvider>().To<Providers.Export.ExportProvider>();
kernel.Bind<IServices.IImportProvider>().To<Providers.Import.ImportProvider>();
kernel.Bind<IServices.IQuoteProvider>().To<Providers.Quote.QuoteProvider>();
kernel.Bind<IServices.IEmailProvider>().To<Providers.Email.EmailProvider>();
kernel.Bind<IServices.IQuoteManagementProvider>().To<Providers.Quote.Management.QuoteManagementProvider>();
kernel.Bind<IServices.IImportPricebookProvider>().To<Providers.Import.Pricebook.PricebookProvider>();
kernel.Bind<IServices.IDashboardProvider>().To<Providers.Dashboard.DashboardProvider>();
kernel.Bind<IServices.IAuditProvider>().To<Providers.Audit.AuditProvider>();
}
}
在我的控制,我有我的属性声明如下:
[Inject]
public IAccountProvider AccountProvider { get; set; }
但如果我有一个空的构造这样只会工作所以:
public AccountController()
{
}
否则我得到以下错误:
使用AccountController的隐式自绑定激活AccountController时出错 没有构造函数可用于创建实现类型的实例。
有没有办法让我做到这一点,没有默认的构造函数,或者这是解决方案?
我个人认为,将IAccountProvider作为参数注入构造函数会更好。它需要成为一个财产吗? – Crwydryn 2013-05-09 11:47:31
你有没有其他的构造函数?即'私人'那些禁止包含一个默认的无参数构造函数?在其他控制器上一样? (并且obv @Crwydryn在prop setter注入滥用方面是正确的) – 2013-05-09 22:00:32