Sonarr/src/NzbDrone.SignalR/SignalrDependencyResolver.cs

45 lines
1.5 KiB
C#
Raw Normal View History

2013-05-05 21:24:33 +00:00
using System;
using Microsoft.AspNet.SignalR;
2016-12-09 02:37:46 +00:00
using Microsoft.AspNet.SignalR.Infrastructure;
2013-05-10 23:53:50 +00:00
using NzbDrone.Common.Composition;
2013-05-05 21:24:33 +00:00
2013-09-11 06:33:47 +00:00
namespace NzbDrone.SignalR
2013-05-05 21:24:33 +00:00
{
2017-08-28 05:58:52 +00:00
public class SignalRDependencyResolver : DefaultDependencyResolver
2013-05-05 21:24:33 +00:00
{
2013-05-10 23:53:50 +00:00
private readonly IContainer _container;
2013-05-05 21:24:33 +00:00
2013-05-10 23:53:50 +00:00
public static void Register(IContainer container)
2013-05-05 21:24:33 +00:00
{
2017-08-28 05:58:52 +00:00
GlobalHost.DependencyResolver = new SignalRDependencyResolver(container);
2013-05-05 21:24:33 +00:00
}
2017-08-28 05:58:52 +00:00
private SignalRDependencyResolver(IContainer container)
2013-05-05 21:24:33 +00:00
{
_container = container;
2016-12-09 02:37:46 +00:00
var performanceCounterManager = new SonarrPerformanceCounterManager();
Register(typeof(IPerformanceCounterManager), () => performanceCounterManager);
2013-05-05 21:24:33 +00:00
}
public override object GetService(Type serviceType)
{
2017-08-28 05:58:52 +00:00
// Microsoft.AspNet.SignalR.Infrastructure.AckSubscriber is not registered in our internal contaiiner,
// but it still gets treated like it is (possibly due to being a concrete type).
var fullName = serviceType.FullName;
if (fullName == "Microsoft.AspNet.SignalR.Infrastructure.AckSubscriber" ||
fullName == "Newtonsoft.Json.JsonSerializer")
{
return base.GetService(serviceType);
}
2013-05-10 23:53:50 +00:00
if (_container.IsTypeRegistered(serviceType))
{
return _container.Resolve(serviceType);
}
2013-05-05 21:24:33 +00:00
2013-05-10 23:53:50 +00:00
return base.GetService(serviceType);
2013-05-05 21:24:33 +00:00
}
}
}