FromAssembly
using Castle.Core.Internal;
using Castle.MicroKernel.Registration;
using System;
using System.Collections.Generic;
using System.Reflection;
using System.Runtime.CompilerServices;
namespace Castle.Windsor.Installer
{
public class FromAssembly
{
public static IWindsorInstaller Containing(Type type)
{
if (type == (Type)null)
throw new ArgumentNullException("type");
Assembly assembly = type.Assembly;
return Instance(assembly);
}
public static IWindsorInstaller Containing(Type type, InstallerFactory installerFactory)
{
if (type == (Type)null)
throw new ArgumentNullException("type");
Assembly assembly = type.Assembly;
return Instance(assembly, installerFactory);
}
public static IWindsorInstaller Containing<T>()
{
return Containing(typeof(T));
}
public static IWindsorInstaller Containing<T>(InstallerFactory installerFactory)
{
return Containing(typeof(T), installerFactory);
}
public static IWindsorInstaller InDirectory(AssemblyFilter filter)
{
return InDirectory(filter, new InstallerFactory());
}
public static IWindsorInstaller InDirectory(AssemblyFilter filter, InstallerFactory installerFactory)
{
HashSet<Assembly> hashSet = new HashSet<Assembly>(ReflectionUtil.GetAssemblies(filter));
CompositeInstaller compositeInstaller = new CompositeInstaller();
foreach (Assembly item in hashSet) {
compositeInstaller.Add(Instance(item, installerFactory));
}
return compositeInstaller;
}
[MethodImpl(MethodImplOptions.NoInlining)]
public static IWindsorInstaller InThisApplication()
{
Assembly callingAssembly = Assembly.GetCallingAssembly();
return ApplicationAssemblies(callingAssembly, new InstallerFactory());
}
[MethodImpl(MethodImplOptions.NoInlining)]
public static IWindsorInstaller InThisApplication(InstallerFactory installerFactory)
{
Assembly callingAssembly = Assembly.GetCallingAssembly();
return ApplicationAssemblies(callingAssembly, installerFactory);
}
public static IWindsorInstaller Instance(Assembly assembly)
{
return Instance(assembly, new InstallerFactory());
}
public static IWindsorInstaller Instance(Assembly assembly, InstallerFactory installerFactory)
{
return new AssemblyInstaller(assembly, installerFactory);
}
public static IWindsorInstaller Named(string assemblyName)
{
Assembly assemblyNamed = ReflectionUtil.GetAssemblyNamed(assemblyName);
return Instance(assemblyNamed);
}
public static IWindsorInstaller Named(string assemblyName, InstallerFactory installerFactory)
{
Assembly assemblyNamed = ReflectionUtil.GetAssemblyNamed(assemblyName);
return Instance(assemblyNamed, installerFactory);
}
[MethodImpl(MethodImplOptions.NoInlining)]
public static IWindsorInstaller This()
{
return Instance(Assembly.GetCallingAssembly());
}
[MethodImpl(MethodImplOptions.NoInlining)]
public static IWindsorInstaller This(InstallerFactory installerFactory)
{
return Instance(Assembly.GetCallingAssembly(), installerFactory);
}
private static IWindsorInstaller ApplicationAssemblies(Assembly rootAssembly, InstallerFactory installerFactory)
{
HashSet<Assembly> hashSet = new HashSet<Assembly>(ReflectionUtil.GetApplicationAssemblies(rootAssembly));
CompositeInstaller compositeInstaller = new CompositeInstaller();
foreach (Assembly item in hashSet) {
compositeInstaller.Add(Instance(item, installerFactory));
}
return compositeInstaller;
}
}
}