using Autofac; using MAX.Core; using MAX.Core.Autofac; using MAX.Core.DependencyInjection; using MAX.Core.Logger; using MAX.Core.Reflections; using MAX.Framework.Logger; using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using System.Reflection; namespace MAX.Framework; public class Startup : IStartup { public int Priority => int.MaxValue - 1; public void Initialize() { } public void Register(ContainerBuilder builder) { //builder.RegisterInstance(NLogger.Instance).As().SingleInstance(); #region 注册所有IOC接口 Assembly[] assemblies = AppTypeFinder.Assemblies.ToArray(); Type typeSingleton = typeof(ISingletonDependency); builder.RegisterAssemblyTypes(assemblies) .Where(a => typeSingleton.IsAssignableFrom(a) && a.IsClass && !a.IsAbstract && !typeof(INoDependency).IsAssignableFrom(a) ) .AsImplementedInterfaces() .AsSelf() .PropertiesAutowired(new CustomPropertySelector()) .SingleInstance(); Type typeTransient = typeof(ITransientDependency); builder.RegisterAssemblyTypes(assemblies) .Where(a => typeTransient.IsAssignableFrom(a) && a.IsClass && !a.IsAbstract && !typeof(INoDependency).IsAssignableFrom(a) ) .AsImplementedInterfaces() .AsSelf() .PropertiesAutowired(new CustomPropertySelector()) .InstancePerDependency(); #endregion } }