protected override void Configure() { AssemblySource.Instance.Clear(); AssemblySource.Instance.AddRange(AssemblyUtils.GetAppAssemblies()); var builder = new ContainerBuilder(); builder.RegisterType <WindowManager>() .AsImplementedInterfaces() .SingleInstance(); builder.RegisterType <EventAggregator>() .AsImplementedInterfaces() .SingleInstance(); builder.RegisterAssemblyTypes(AssemblyUtils.GetAppAssembliesArray()) .Where(type => type.Name.EndsWith("ViewModel")) .Where(type => !(string.IsNullOrWhiteSpace(type.Namespace)) && type.Namespace.EndsWith("ViewModels")) .Where(type => type.GetInterface(typeof(INotifyPropertyChanged).Name) != null) .AsSelf() .InstancePerDependency(); // register views builder.RegisterAssemblyTypes(AssemblyUtils.GetAppAssembliesArray()) .Where(type => type.Name.EndsWith("View")) .Where(type => !(string.IsNullOrWhiteSpace(type.Namespace)) && type.Namespace.EndsWith("Views")) .AsSelf() .InstancePerDependency(); _container = builder.Build(); }
public ContainerBuilder InitContainer() { PrintHeader(); EnhancedStackTrace.Current(); InitPolly(); ServicesInfo = new ObservableCollection <ServiceInfo>(); ContainerBuilder = new ContainerBuilder(); ContainerBuilder.RegisterModule(new LogRequestModule()); ContainerBuilder.RegisterInstance(_neonConfig); ContainerBuilder.RegisterInstance <IServicesManager>(this); InitManagers(); ContainerBuilder.RegisterAssemblyTypes(typeof(IMediator).GetTypeInfo().Assembly).AsImplementedInterfaces(); AssemblyUtils.GetAppAssemblies().ForEach(a => { ContainerBuilder .RegisterAssemblyTypes(a) .AsClosedTypesOf(typeof(IRequestHandler <,>)) .AsImplementedInterfaces().SingleInstance();; ContainerBuilder .RegisterAssemblyTypes(a) .AsClosedTypesOf(typeof(INotificationHandler <>)) .AsImplementedInterfaces().SingleInstance(); }); // It appears Autofac returns the last registered types first ContainerBuilder.RegisterGeneric(typeof(RequestPostProcessorBehavior <,>)).As(typeof(IPipelineBehavior <,>)); ContainerBuilder.RegisterGeneric(typeof(RequestPreProcessorBehavior <,>)).As(typeof(IPipelineBehavior <,>)); ContainerBuilder.Register <ServiceFactory>(ctx => { var c = ctx.Resolve <IComponentContext>(); return(t => c.Resolve(t)); }); var singletonServices = AssemblyUtils.ScanAllAssembliesFromAttribute(typeof(SingletonAttribute)); var transientServices = AssemblyUtils.ScanAllAssembliesFromAttribute(typeof(TransientAttribute)); var scopedServices = AssemblyUtils.ScanAllAssembliesFromAttribute(typeof(ScopedAttribute)); var dataAccess = AssemblyUtils.ScanAllAssembliesFromAttribute(typeof(DataAccessAttribute)); var luaObjects = AssemblyUtils.ScanAllAssembliesFromAttribute(typeof(LuaScriptObjectAttribute)); var jobObjects = AssemblyUtils.ScanAllAssembliesFromAttribute(typeof(SchedulerJobTaskAttribute)); var dbSeedsObject = AssemblyUtils.ScanAllAssembliesFromAttribute(typeof(DatabaseSeedAttribute)); var componentsObject = AssemblyUtils.ScanAllAssembliesFromAttribute(typeof(ComponentAttribute)); _availableServices = AssemblyUtils.ScanAllAssembliesFromAttribute(typeof(ServiceAttribute)); _logger.LogDebug($"Services {_availableServices.Count}"); _logger.LogDebug($"Singleton services {singletonServices.Count}"); _logger.LogDebug($"Transient services {transientServices.Count}"); _logger.LogDebug($"Scoped services {scopedServices.Count}"); _logger.LogDebug($"DataAccesses {dataAccess.Count}"); luaObjects.ForEach(l => { ContainerBuilder.RegisterType(l).AsSelf().SingleInstance(); }); singletonServices.ForEach(t => RegisterService(LifeScopeTypeEnum.SINGLETON, t)); componentsObject.ForEach(t => RegisterService(LifeScopeTypeEnum.SINGLETON, t)); ContainerBuilder.RegisterAssemblyTypes(AssemblyUtils.GetAppAssemblies().ToArray()) .Where(t => t == typeof(IDatabaseSeed)) .AsImplementedInterfaces() .SingleInstance(); ContainerBuilder.RegisterAssemblyTypes(AppDomain.CurrentDomain.GetAssemblies()) .Where(t => t == typeof(IDataAccess <>)) .AsImplementedInterfaces() .SingleInstance(); ContainerBuilder.RegisterAssemblyTypes(AssemblyUtils.GetAppAssemblies().ToArray()) .AsClosedTypesOf(typeof(IDataAccess <>)).AsImplementedInterfaces(); ContainerBuilder.RegisterAssemblyTypes(AssemblyUtils.GetAppAssemblies().ToArray()) .AsClosedTypesOf(typeof(AbstractDataAccess <>)).AsImplementedInterfaces(); ContainerBuilder.RegisterAssemblyTypes(AssemblyUtils.GetAppAssemblies().ToArray()) .AsClosedTypesOf(typeof(IDtoMapper <,>)).AsImplementedInterfaces(); ContainerBuilder.RegisterAssemblyTypes(AssemblyUtils.GetAppAssemblies().ToArray()) .AsClosedTypesOf(typeof(AbstractDtoMapper <,>)).AsImplementedInterfaces(); dataAccess.ForEach(d => { ContainerBuilder.RegisterType(d).As(AssemblyUtils.GetInterfaceOfType(d)).InstancePerLifetimeScope(); }); transientServices.ForEach(t => RegisterService(LifeScopeTypeEnum.TRANSIENT, t)); dbSeedsObject.ForEach(t => { ContainerBuilder.RegisterType(t).AsSelf().InstancePerLifetimeScope(); }); scopedServices.ForEach(t => RegisterService(LifeScopeTypeEnum.SCOPED, t)); jobObjects.ForEach(t => RegisterService(LifeScopeTypeEnum.SCOPED, t)); ContainerBuilder.RegisterAssemblyTypes(AssemblyUtils.GetAppAssembliesArray()) .Where(t => t.Name.ToLower().EndsWith("service")) .AsImplementedInterfaces().SingleInstance(); return(ContainerBuilder); }