Ninject没有注入依赖

时间:2012-09-21 19:31:30

标签: ninject

我的Ninject构造有问题。也许有人可以告诉我我做错了什么..

好的..这是模块我有:

public class WebPageModule:NinjectModule
        {
            public override void Load()
            {
                Bind<TranscriptPageMediaWidgetViewModelForWebPage>().ToSelf().InSingletonScope();
                Bind<TranscriptPageTranscriptWidgetViewModelForWebPage>().ToSelf().InSingletonScope();
                Bind<WebPageTranscriptProvider>().ToSelf().InSingletonScope();

                Bind<ITranscriptProvider>().To<WebPageTranscriptProvider>().WhenInjectedInto<TranscriptPageTranscriptWidgetViewModelForWebPage>();

                //Bind<ITranscriptProvider>().To<WebPageTranscriptProvider>();
                Bind<ITranscriptRendererWidget>().To<TranscriptPageTranscriptWidgetViewModelForWebPage>();
                Bind<IMediaRendererWidget>().To<TranscriptPageMediaWidgetViewModelForWebPage>();
            }
        }

然后在NinjectWebCommons.cs中我有:

private static IKernel CreateKernel()
        {
            var kernel = new StandardKernel(new WebPageModule(),new TweeterModule(), new BookmarkModule());
            kernel.Bind<Func<IKernel>>().ToMethod(ctx => () => new Bootstrapper().Kernel);
            kernel.Bind<IHttpModule>().To<HttpApplicationInitializationHttpModule>();
            kernel.Settings.AllowNullInjection = true;//http://stackoverflow.com/questions/10517962/using-default-parameter-values-with-ninject-3-0

            RegisterServices(kernel);
            return kernel;
        }

然后我使用属性注入: https://github.com/ninject/ninject/wiki/Injection-Patterns

在我的“公共类TranscriptPageTranscriptWidgetViewModelForWebPage:ITranscriptRendererWidget”

这里是:

 [Inject]
        public ITranscriptProvider TranscriptProvider
        {
            get { return _transcriptProvider; }
            set { _transcriptProvider = value; }
        }

但是,当我进入构造函数并尝试使用_transcriptProvider时,它是NULL:

 public TranscriptPageTranscriptWidgetViewModelForWebPage(string dataEndpoint, string focusCue)
        {
            InitParentInterfaceProperties();
            Transcript = _transcriptProvider.GetTranscript(new Uri(dataEndpoint));
            FocusCue = focusCue.Replace("*", "").ToLower();
        }

任何想法我做错了什么?谢谢! 人

1 个答案:

答案 0 :(得分:0)

看起来你正试图在构造函数中访问该属性。

.NET的对象创建语义是这样的,它根本无法工作(这是很多很好的理由,除非你真的在处理可选的依赖,否则很难用构造函数注入来实现它)