依存性注入フレームワークを Ninject から StructureMap に切り替えたところです - Ninject が非常に悪いパフォーマンスを生み出すためです!
私が抱えている問題は、DependencyResolver を配線すると、RouteTable.Routes.MapHubs 行によってハブがクリアされることです。
GlobalHost.DependencyResolver = new SignalRDependencyResolver(ObjectFactory.Container);
RouteTable.Routes.MapHubs(GlobalHost.DependencyResolver);
/SignalR/hubs javascript ファイルのハブ オブジェクトに空の Hubs オブジェクトがあることを意味します。
wiki のように application_start で DependencyResolver を割り当てており、SignalR の後に MVC4 と WebAPI 依存関係リゾルバーを実行しています。
何が原因でしょうか?
更新 - DependencyResolver の実装は次のとおりです。
public class SignalRDependencyResolver : DefaultDependencyResolver
{
private IContainer _container;
public SignalRDependencyResolver(IContainer container)
{
_container = container;
}
public override object GetService(Type serviceType)
{
object service = null;
if (!serviceType.IsAbstract && !serviceType.IsInterface && serviceType.IsClass)
{
// Concrete type resolution
service = _container.GetInstance(serviceType);
}
else
{
// Other type resolution with base fallback
service = _container.TryGetInstance(serviceType) ?? base.GetService(serviceType);
}
return service;
}
public override IEnumerable<object> GetServices(Type serviceType)
{
var objects = _container.GetAllInstances(serviceType).Cast<object>();
objects.Concat(base.GetServices(serviceType));
return objects;
}
}