You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
38 lines
1.3 KiB
38 lines
1.3 KiB
3 years ago
|
using System.Collections.Generic;
|
||
|
using System.Linq;
|
||
|
using DryIoc;
|
||
|
using NzbDrone.Common.EnvironmentInfo;
|
||
|
|
||
|
namespace NzbDrone.Common.Composition.Extensions
|
||
|
{
|
||
|
public static class ServiceCollectionExtensions
|
||
|
{
|
||
|
public static Rules WithNzbDroneRules(this Rules rules)
|
||
|
{
|
||
|
return rules.WithMicrosoftDependencyInjectionRules()
|
||
|
.WithAutoConcreteTypeResolution()
|
||
|
.WithDefaultReuse(Reuse.Singleton);
|
||
|
}
|
||
|
|
||
|
public static IContainer AddStartupContext(this IContainer container, StartupContext context)
|
||
|
{
|
||
|
container.RegisterInstance<IStartupContext>(context, ifAlreadyRegistered: IfAlreadyRegistered.Replace);
|
||
|
return container;
|
||
|
}
|
||
|
|
||
|
public static IContainer AutoAddServices(this IContainer container, List<string> assemblyNames)
|
||
|
{
|
||
|
var assemblies = AssemblyLoader.Load(assemblyNames);
|
||
|
|
||
|
container.RegisterMany(assemblies,
|
||
|
serviceTypeCondition: type => type.IsInterface && !string.IsNullOrWhiteSpace(type.FullName) && !type.FullName.StartsWith("System"),
|
||
|
reuse: Reuse.Singleton);
|
||
|
|
||
|
var knownTypes = new KnownTypes(assemblies.SelectMany(x => x.GetTypes()).ToList());
|
||
|
container.RegisterInstance(knownTypes);
|
||
|
|
||
|
return container;
|
||
|
}
|
||
|
}
|
||
|
}
|