Ninject - how and when to inject

后端 未结 2 1834
孤街浪徒
孤街浪徒 2020-12-25 14:01

I\'m a newbie when it comes to DI and ninject and I\'m struggling a bit about when the actual injection should happen and how to start the binding.

I\'m using it alr

2条回答
  •  太阳男子
    2020-12-25 14:42

    You are directly newing TestClass, which Ninject has no way of intercepting - remember there's no magic like code transformation intercepting your news etc.

    You should be doing kernel.Get instead.

    Failing that, you can inject it after you new it with a kernel.Inject( test);

    I think there's an article in the wiki that talks about Inject vs Get etc.

    Note that in general, direct Get or Inject calls are a Doing It Wrong smell of Service Location, which is an antipattern. In the case of your web app, the NinjectHttpModule and PageBase are the hook that intercepts object creation - there are similar interceptors / logical places to intercept in other styles of app.

    Re your Bind().ToSelf(), generally a StandardKernel has ImplicitSelfBinding = true which would make that unnecessary (unless you want to influence its Scope to be something other than .InTransientScope()).

    A final style point:- you're using property injection. There are rarely good reasons for this, so you should be using constructor injection instead.

    And do go buy Dependency Injection in .NET by @Mark Seemann, who has stacks of excellent posts around here which cover lots of important but subtle considerations in and around the Dependency Injection area.

提交回复
热议问题