C# 试图让ninject和Signal正常工作
在我的NinjectWebCommon.cs文件中,在C# 试图让ninject和Signal正常工作,c#,asp.net,ninject,signalr,C#,Asp.net,Ninject,Signalr,在我的NinjectWebCommon.cs文件中,在RegisterServices方法下,我有以下内容: private static void RegisterServices(IKernel kernel) { kernel.Bind<IProfileRepository>().To<ProfileRepository>(); kernel.Bind<IMatchUpService>().
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);
}
由于某种原因,当我尝试在我的Hub类中使用
soloUsers
对象时,我得到的对象引用没有设置为对象的实例
,因为soloUsers
对象从未被实例化,或者换句话说,没有被注入。我做错什么了吗?您的问题是您有一个私有属性,而Ninject默认情况下不注入私有属性
因此,您可以使您的属性公开
,也可以通过以下方式启用非公开属性注入:
kernel.Settings.InjectNonPublic = true;
我不熟悉signar中的依赖项注入(因此可能不受支持),但您应该始终更喜欢构造函数注入,因此您的Hub
应该如下所示:
public class MatchMaker : Hub
{
private readonly ISoloUserRepository soloUsers;
public MatchMaker(ISoloUserRepository soloUsers)
{
this.soloUsers = soloUsers;
}
}
由于此答案标记为已接受,我认为它解决了@anthonypliu的问题,这意味着ninject可用于信号机及其集线器。我现在就去试试
public class MatchMaker : Hub
{
private readonly ISoloUserRepository soloUsers;
public MatchMaker(ISoloUserRepository soloUsers)
{
this.soloUsers = soloUsers;
}
}