3

在我的 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);

        }  

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

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

出于某种原因,当我尝试soloUsers在 Hub 类中使用该对象时,我得到object reference not set to instance of an object了因为该soloUsers对象从未被实例化,或者换句话说,没有被注入。难道我做错了什么?

4

1 回答 1

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;
    }
}
于 2012-07-23T05:46:14.827 回答