使用 Ninject 获取实例

Get an Instance using Ninject

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

public class ServicesModule : NinjectModule
{
    public override void Load()
    {
        Kernel.Bind<IDocumentServiceApi>().To<DocumentServiceApi>().InRequestScope();
        Kernel.Bind<IConfigurationService>().To<ConfigurationService>().InRequestScope();
        Kernel.Bind<IReportGenerationProcessor>().To<ReportGenerationProcessor>().InRequestScope();
    }
}

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

我见过很多不同的方法,但 none 对我有用。我经常收到错误消息: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<ReportMetaData>();

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

如果我能提供更多信息,请告诉我。我对 Ninject 不太了解。

好的,所以文档对此有所暗示,但他们没有使用接口并注册了 .ToSelf()

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

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