Ejemplo n.º 1
0
        private void InitializeContainer(EventBroker broker, CoreConfiguration configuration)
        {
            var builder = new ContainerBuilder();

            //other dependencies
            builder.RegisterInstance(configuration).Keyed("core.configuration", typeof(CoreConfiguration)).As <CoreConfiguration>().SingleInstance();

            builder.RegisterInstance(this).Keyed <IEngine>("core.engine").As <IEngine>().SingleInstance();
            //containerManager.AddComponentInstance<FirstContainerConfigurer>(this, "core.containerConfigurer");
            builder.RegisterType <ConfigurationManagerWrapper>().Keyed <IConfigurationManager>("core.configurationManagerWrapper").As <IConfigurationManager>().SingleInstance();
            builder.RegisterType <CoreCryptography>().Keyed <ICoreCryptography>("core.cryptography").As <ICoreCryptography>().SingleInstance();
            var notificationInstance = new SettingNotification();

            builder.RegisterInstance(notificationInstance).SingleInstance();
            builder.RegisterInstance(new EventLog()
            {
                Source = "Application"
            }).SingleInstance();
            builder.RegisterType <DefaultLogger>().Keyed <ILogger>(CoreConsts.DefaultLoggerKey).SingleInstance();
            //type finder
            var typeFinderInstance = new WebAppTypeFinder(configuration);

            builder.RegisterInstance(typeFinderInstance).Keyed <ITypeFinder>("core.typeFinder").As <ITypeFinder>().SingleInstance();


            //register dependencies provided by other assemblies

            var drTypes     = typeFinderInstance.FindClassesOfType <INeedDependencyRegistrar>();
            var drInstances = drTypes.Select(drType => (INeedDependencyRegistrar)Activator.CreateInstance(drType)).ToList();

            //sort
            drInstances = drInstances.AsQueryable().OrderBy(t => t.Order).ToList();
            foreach (var dependencyRegistrar in drInstances)
            {
                dependencyRegistrar.Register(builder, typeFinderInstance);
            }

            //event broker
            builder.RegisterInstance(broker).SingleInstance();

            //Setting Subscribe

            if (notificationInstance != null)
            {
                foreach (var settingObserver in typeFinderInstance.FindClassesOfType <BaseSettingObserver>())
                {
                    var type = Activator.CreateInstance(settingObserver) as BaseSettingObserver;
                    if (type != null)
                    {
                        notificationInstance.Subscribe(type);
                    }
                }
            }

            _containerManager = new ContainerManager(builder.Build(), configuration);
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Register dependencies
        /// </summary>
        /// <param name="config">Config</param>
        protected virtual void RegisterDependencies(WebCoreConfig config)
        {
            var builder   = new ContainerBuilder();
            var container = builder.Build();

            //we create new instance of ContainerBuilder
            //because Build() or Update() method can only be called once on a ContainerBuilder.


            //dependencies
            var typeFinder = new WebAppTypeFinder(config);

            builder = new ContainerBuilder();
            builder.RegisterInstance(config).As <WebCoreConfig>().SingleInstance();
            builder.RegisterInstance(this).As <IEngine>().SingleInstance();
            builder.RegisterInstance(typeFinder).As <ITypeFinder>().SingleInstance();
            builder.Update(container);

            //register dependencies provided by other assemblies
            builder = new ContainerBuilder();
            var drTypes     = typeFinder.FindClassesOfType <IDependencyRegistrar>();
            var drInstances = new List <IDependencyRegistrar>();

            foreach (var drType in drTypes)
            {
                drInstances.Add((IDependencyRegistrar)Activator.CreateInstance(drType));
            }
            //sort
            drInstances = drInstances.AsQueryable().OrderBy(t => t.Order).ToList();
            foreach (var dependencyRegistrar in drInstances)
            {
                dependencyRegistrar.Register(builder, typeFinder);
            }
            builder.Update(container);



            builder = new ContainerBuilder();
            drTypes = typeFinder.FindClassesOfType <IDependency>();
            foreach (var item in drTypes)
            {
                if (item.IsGenericType)
                {
                    continue;
                }
                // if (item.Name.IndexOf("Service") < 0 || item.Name.IndexOf("BaseService") >= 0) { continue; }
                var temp = builder.RegisterType(item);
                foreach (var it in item.GetInterfaces().Where(itf => typeof(IDependency).IsAssignableFrom(itf)).Reverse())
                {
                    temp.As(it).InstancePerLifetimeScope();
                    //break;
                }
            }

            builder.Update(container);

            //DatabaseInitialize(typeFinder.GetAssemblies());

            this._containerManager = new ContainerManager(container);

            //set dependency resolver
            DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
        }