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 に答える