SignalR 0.5.2を使用していて、Unityを使用してDependencyResolverをセットアップしようとしています。私はできる限り簡単なコードを書きました。注入しようとしているハブがあり、次のようになります。
public class SimpleHub : Hub
{
private readonly ITestService _service;
public SimpleHub(ITestService service)
{
_service = service;
}
public void Update()
{
Clients.callback("Kevin");
}
}
および次のようなDependencyResolver:
public class UnityDependencyResolver : DefaultDependencyResolver
{
private readonly IUnityContainer _container;
public UnityDependencyResolver(IUnityContainer container)
{
_container = container;
}
public override object GetService(Type serviceType)
{
if (_container.IsRegistered(serviceType))
{
return _container.Resolve(serviceType);
}
return base.GetService(serviceType);
}
public override IEnumerable<object> GetServices(Type serviceType)
{
if (_container.IsRegistered(serviceType))
{
return _container.ResolveAll(serviceType);
}
return base.GetServices(serviceType);
}
}
Global.asaxに依存関係リゾルバーを登録します
protected void Application_Start()
{
IUnityContainer container = new UnityContainer();
InitializeContainer(container);
SignalR.IDependencyResolver resolver = new UnityDependencyResolver(container);
GlobalHost.DependencyResolver = resolver;
RouteTable.Routes.MapHubs();
// more MVC stuff here
}
ここで、InitializeContainerはUnityにITestServiceを登録します
リゾルバーは、すべてのSignalRタイプに対して呼び出されるという点で「機能」します。ハブをデフォルトのコンストラクターのままにすると、すべてが読み込まれます。ただし、リゾルバーはITestServiceインターフェースを解決するように求められることはありません。
また、リゾルバーをMapHubsに渡してみましたが、まだ運がありません。[Dependency]属性を使用してプロパティインジェクションも試しましたが、それも機能しませんでした。
リゾルバーもMVCに登録する必要がありますか?(両方のIDependecyResolverインターフェイスを実装して試しましたが、リゾルバーがIServiceLocatorを実装していないことを示す例外が発生します)