mirror of https://github.com/Sonarr/Sonarr
95 lines
2.8 KiB
C#
95 lines
2.8 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using Autofac;
|
|
using Autofac.Builder;
|
|
using Autofac.Core;
|
|
using SignalR;
|
|
|
|
namespace NzbDrone.Core
|
|
{
|
|
public class AutofacSignalrDependencyResolver : DefaultDependencyResolver, IDependencyResolver, IRegistrationSource
|
|
{
|
|
private ILifetimeScope LifetimeScope { get; set; }
|
|
|
|
public AutofacSignalrDependencyResolver(ILifetimeScope lifetimeScope)
|
|
{
|
|
LifetimeScope = lifetimeScope;
|
|
var currentRegistrationSource =
|
|
LifetimeScope.ComponentRegistry.Sources.FirstOrDefault(s => s.GetType() == GetType());
|
|
if (currentRegistrationSource != null)
|
|
{
|
|
((AutofacSignalrDependencyResolver)currentRegistrationSource).LifetimeScope = lifetimeScope;
|
|
}
|
|
else
|
|
{
|
|
LifetimeScope.ComponentRegistry.AddRegistrationSource(this);
|
|
}
|
|
}
|
|
|
|
public AutofacSignalrDependencyResolver()
|
|
{
|
|
}
|
|
|
|
public override object GetService(Type serviceType)
|
|
{
|
|
object result;
|
|
|
|
if (LifetimeScope == null)
|
|
{
|
|
return base.GetService(serviceType);
|
|
}
|
|
|
|
if (LifetimeScope.TryResolve(serviceType, out result))
|
|
{
|
|
return result;
|
|
}
|
|
|
|
return null;
|
|
}
|
|
|
|
public override IEnumerable<object> GetServices(Type serviceType)
|
|
{
|
|
object result;
|
|
|
|
if (LifetimeScope == null)
|
|
{
|
|
return base.GetServices(serviceType);
|
|
}
|
|
|
|
if (LifetimeScope.TryResolve(typeof(IEnumerable<>).MakeGenericType(serviceType), out result))
|
|
{
|
|
return (IEnumerable<object>)result;
|
|
}
|
|
|
|
return Enumerable.Empty<object>();
|
|
}
|
|
|
|
public IEnumerable<IComponentRegistration> RegistrationsFor(Service service, Func<Service, IEnumerable<IComponentRegistration>> registrationAccessor)
|
|
{
|
|
var typedService = service as TypedService;
|
|
if (typedService != null)
|
|
{
|
|
var instances = base.GetServices(typedService.ServiceType);
|
|
|
|
if (instances != null)
|
|
{
|
|
return instances
|
|
.Select(i => RegistrationBuilder.ForDelegate(i.GetType(), (c, p) => i).As(typedService.ServiceType)
|
|
.InstancePerLifetimeScope()
|
|
.PreserveExistingDefaults()
|
|
.CreateRegistration());
|
|
}
|
|
}
|
|
|
|
return Enumerable.Empty<IComponentRegistration>();
|
|
}
|
|
|
|
bool IRegistrationSource.IsAdapterForIndividualComponents
|
|
{
|
|
get { return false; }
|
|
}
|
|
}
|
|
}
|