当前位置:  开发笔记 > 编程语言 > 正文

使用Ninject获取实例

如何解决《使用Ninject获取实例》经验,为你挑选了1个好方法。

如何使用Ninject获取单个实例?这是我的服务模块:

public class ServicesModule : NinjectModule
{
    public override void Load()
    {
        Kernel.Bind().To().InRequestScope();
        Kernel.Bind().To().InRequestScope();
        Kernel.Bind().To().InRequestScope();
    }
}

我需要一个实例IReportGenerationProcessor来触发我从Azure服务总线队列收到的消息.

我见过很多不同的方法,但没有一个对我有用.我不断得到错误:Object instance not set to an instance of an object.

//I do instantiate this class using new WebJobBase();
public class WebJobBase
    {
        public void ProcessMessage(BrokeredMessage message)
        {
                // Just need an instance of IReportGenerationProcessor here
                var _processor = new ReportGenerationProcessor();
                _processor.ProcessMessage(message);
        }
    }

这是我的IReportGenerationProcessor实现:

    public interface IReportGenerationProcessor
    {
        DocumentMetaData ProcessMessage(BrokeredMessage message);
    }
    public class ReportGenerationProcessor : IReportGenerationProcessor
    {
        // Go figure these don't work either
        [Inject]
        public IConfigurationService _config { get; set; }
        [Inject]
        public IDocumentServiceApi _docService { get; set; }

        public DocumentMetaData ProcessMessage(BrokeredMessage message)
        {
            var report = message.GetBody();

            //Do some stuff
            return new DocumentMetaData(); // just a place holder
        }
    }

如果我能提供更多信息,请告诉我.我对Ninject知之甚少.



1> Mark C...:

好的,所以文档类型暗示了这一点,但他们没有使用接口并注册.ToSelf().

基本上我需要StandardKernel用my ServicesModule从上面实例化一个新的,并.Get<>();为我注册的接口调用方法.

IKernel kernel = new StandardKernel(new ServicesModule());
var processor = kernel.Get();
processor.ProcessMessage(message);

推荐阅读
帆侮听我悄悄说星星
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有