我尝试与Unity3一起实现SignalR 2.0,但到目前为止没有成功,没有例外或错误。此外,断点也不会受到影响,所以很难调试并弄清楚我做错了什么。
我把这个网页作为例子: http://www.asp.net/signalr/overview/signalr-20/extensibility/dependency-injection 但是用ninject取代了统一。
这是我的代码。
我有一个startUp类:
[assembly: OwinStartup(typeof(Hubs.StartUp))]
namespace Hubs
{
public class StartUp
{
public void Configuration(IAppBuilder app)
{
var configuration = new HubConfiguration //I put a breakpoint here
{
Resolver = GetResolver()
};
app.MapSignalR(configuration);
}
private static IDependencyResolver GetResolver()
{
var container = new UnityContainer(); //I put a breakpoint here
Validations.IoC.Initialize(container);
return new UnityDependencyResolver(container);
}
}
}
UnityDependencyResolver类:
namespace Hubs
{
public class UnityDependencyResolver : DefaultDependencyResolver
{
private readonly IUnityContainer _container;
public UnityDependencyResolver(IUnityContainer container)
{
_container = container;
}
public override object GetService(Type serviceType)
{
return _container.Resolve(serviceType) ?? base.GetService(serviceType);
}
public override IEnumerable<object> GetServices(Type serviceType)
{
return _container.ResolveAll(serviceType) ?? base.GetServices(serviceType);
}
}
}
使用构造函数依赖注入的集线器类
namespace Hubs.Hubs
{
public class TestHub : Hub
{
private readonly ISomeValidation _validation;
public TestHub(ISomeValidation validation)
{
_validation = validation;
}
public SomeObject Get()
{
return _validation.Get();
}
}
}
还有Validations.IoC类
public static class IoC
{
public static void Initialize(UnityContainer container)
{
container.RegisterType<ISomeValidation, SomeValidation>();
}
}
我无法弄清楚我做错了什么,所以有人可以帮我解决这个问题吗?
答案 0 :(得分:1)
经过一番搜索后,我想我可能会找到问题的原因。似乎有一个默认的依赖项解析器试图解析集线器类但无法执行它,这是有道理的因为我没有注册集线器类。
我相信在ninject示例中,注册发生在这段代码中:
kernel.Bind<IHubConnectionContext>().ToMethod(context =>
resolver.Resolve<IConnectionManager>().GetHubContext<StockTickerHub>().Clients
).WhenInjectedInto<IStockTicker>();
不确定,因为我从未对ninject做过任何事情。我无法弄清楚如何将其转换为Unity代码。
经过一些搜索后,我在此处找到了另一个代码示例:http://damienbod.wordpress.com/2013/11/05/using-signalr-with-unity/
这实际上是有效的。它还包含了hub类型的注册,因此它可能解决了我的问题。