【发布时间】:2015-06-30 12:41:27
【问题描述】:
我对 InSingletonScope() 有一些问题。
我的界面:
public interface ISettingsManager
{
ApplicationSettings Application { get; }
}
和我的班级:
public class SettingsManager : ISettingsManager
{
private readonly IConfigurationService _configurationService;
private readonly Lazy<ApplicationSettings> _applicationSettings;
public ApplicationSettings Application { get { return _applicationSettings.Value; } }
private SettingsManager(IConfigurationService context)
{
_configurationService = context;
_applicationSettings = new Lazy<ApplicationSettings>(() => new ApplicationSettings(context));
}
}
NinjectWebCommon 中的标准绑定如下所示:
kernel.Bind<ISettingsManager>().To<SettingsManager>().InSingletonScope();
kernel.Bind<IConfigurationService >().To<ConfigurationService>().InRequestScope();
当我在 HomeController 中使用构造函数注入或属性注入时:
[Inject]
public ISettingsManager SettingsManager { private get;}
然后我得到一个错误:
An error occurred when trying to create a controller of type 'Web.Controllers.HomeController'. Make sure that the controller has a parameterless public constructor.
问题出在哪里?我的单身人士出了什么问题?
我在我的项目中使用依赖注入,当我在构造函数中注入一个接口时,一切正常。当我添加 ISettingsManagers 时,我遇到了很多问题。
【问题讨论】:
-
1) 您是否确定您的控制器已添加到容器中,即您是否指定了
GlobalConfiguration.DependencyResolver,2) 为什么您在同一个控制器上有属性注入和构造函数注入 - 或者您是将一些随机参数传递给您的构造函数。 -
1) 如何指定
GlobalConfiguration.DependencyResolver?我只使用标准的 NinjectWebCommon。 2)在我的家庭控制器中,我有一些服务注入(InRequestScope),这工作正常。当我在 Home Controller(或属性注入)的第二个参数中添加 ISettingsManager 时,我总是使用无参数公共构造函数得到错误 -
显示你的
NinjectWebCommon,除非它看起来像这样link。你是使用 WebApi 还是 MVC 还是两者兼而有之? -
@RuaidhriPrimrose 这个问题的答案是将它绑定到一个接口 - 这个已经是......
标签: c# asp.net-mvc dependency-injection ninject