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对象永远不会被实例化,换句话说,不会被注入.难道我做错了什么?
您的问题是您有一个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)
| 归档时间: |
|
| 查看次数: |
662 次 |
| 最近记录: |