2012-07-23 20 views
3

工作在我NinjectWebCommon.cs文件,在RegisterServices方法我有以下几点:试图让ninject和signalR正常

private static void RegisterServices(IKernel kernel) 
     { 
      kernel.Bind<IProfileRepository>().To<ProfileRepository>(); 
      kernel.Bind<IMatchUpService>().To<MatchUpService>(); 
      kernel.Bind<ISoloUserRepository>().To<SoloUserRepository>(); 
      SignalR.GlobalHost.DependencyResolver = new SignalR.Ninject.NinjectDependencyResolver(kernel); 

     } 

我试图注入SoloUserRepository到我中心类,这里是我的枢纽类:

public class MatchMaker : Hub 
    { 
     [Inject] 
     private ISoloUserRepository soloUsers { get; set; } 
} 

出于某种原因,当我尝试使用soloUsers对象在我中心上课,我得到object reference not set to instance of an object因为soloUsers对象永远不会被实例化,或者换句话说,不注射。难道我做错了什么?

回答

8

你的问题是你有一个private属性,并且Ninject默认不会注入私有属性。

所以,要么你让你的财产public,也可以使非公共财产注射:

kernel.Settings.InjectNonPublic = true; 

我不熟悉SignalR(所以也许它不支持)的依赖注入,但你应该总是喜欢构造函数注入所以你Hub应该是这样的:

public class MatchMaker : Hub 
{  
    private readonly ISoloUserRepository soloUsers; 

    public MatchMaker(ISoloUserRepository soloUsers) 
    { 
     this.soloUsers = soloUsers; 
    } 
} 
+0

由于这个答案作为接受标记我认为它解决了@anthonypliu的问题,这意味着ninject可以signalr和集线器使用。现在就试试看 – 2016-05-11 18:08:40