我遇到了一个问题,除非我的控制器中有一个空白的默认构造函数,否则 ninject 将无法工作。我通过我的 app_start 中的 NinjectWebCommon.cs 中的绑定进行注册,如下所示:
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 时出错 没有可用于创建实现类型实例的构造函数。
有没有办法让我在没有默认构造函数的情况下做到这一点,或者这是解决方案?