试图让ninject和signalR正常工作

ant*_*liu 3 c# asp.net ninject signalr

在我的NinjectWebCommon.cs文件中,根据RegisterServices方法,我有以下内容:

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);

        }  
Run Code Online (Sandbox Code Playgroud)

我正在尝试将SoloUserRepository注入我的集线器类,这是我的集线器类:

public class MatchMaker : Hub
    {
        [Inject]
        private ISoloUserRepository soloUsers { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

出于某种原因,当我尝试soloUsers在我的Hub类中使用该对象时,我得到object reference not set to instance of an object因为该soloUsers对象永远不会被实例化,换句话说,不会被注入.难道我做错了什么?

nem*_*esv 8

您的问题是您有一个private属性,默认情况下Ninject不会注入私有属性.

因此,要么您自己创建财产,public要么启用非公共财产注入:

kernel.Settings.InjectNonPublic = true;
Run Code Online (Sandbox Code Playgroud)

我不熟悉SignalR中的依赖注入(所以可能不支持),但你应该总是更喜欢构造函数注入,所以你Hub应该像:

public class MatchMaker : Hub
{    
    private readonly ISoloUserRepository soloUsers;

    public MatchMaker(ISoloUserRepository soloUsers) 
    {
        this.soloUsers = soloUsers;
    }
}
Run Code Online (Sandbox Code Playgroud)