コード例 #1
0
        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();
        }
コード例 #2
0
        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);
        }