【问题标题】:Error during InSingletonScope() with Ninject使用 Ninject 在 InSingletonScope() 期间出错
【发布时间】: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


【解决方案1】:

我知道出了什么问题。私有构造函数是主要问题。当我将其更改为:

public SettingsManager(IConfigurationService context)

然后它就像一个魅力。

【讨论】:

    【解决方案2】:

    错误它自己说它的主控制器需要无参数,但是如果正确设置了 ninject 则不正确,并且该错误可以嵌套到没有所需绑定的单个类中。

    但是,您在此处显示的内容可能会出错。

    您的配置在请求范围内,您的设置在单例范围内。

    这意味着它可能第一次运行良好,但是在第二次尝试中,它的新请求和配置可能会被放置在您的单例设置中,并且会试探性地破坏某些东西。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-07-06
      • 1970-01-01
      • 1970-01-01
      • 2011-05-20
      • 1970-01-01
      • 2017-01-30
      • 1970-01-01
      相关资源
      最近更新 更多