Esempio n. 1
0
 public void Register(ContainerBuilder builder, SmartConfig config)
 {
     builder.RegisterType <Context.SampleDbContext>().As <DbContext>().InstancePerLifetimeScope();
     builder.RegisterType <Context.OtherDbContext>().As <Context.IOtherDbContext>().InstancePerLifetimeScope();
     builder.RegisterGeneric(typeof(EFRepository <>)).As(typeof(IRepository <>)).InstancePerLifetimeScope();
     builder.RegisterGeneric(typeof(EFRepository <,>)).As(typeof(IRepository <,>)).InstancePerLifetimeScope();
 }
Esempio n. 2
0
 public void Register(Autofac.ContainerBuilder builder, SmartConfig config)
 {
     builder.RegisterGeneric(typeof(ITmpl <>)).As(typeof(IT <>)).InstancePerLifetimeScope();
     builder.RegisterGeneric(typeof(ITmpl <,>)).As(typeof(IT <,>)).InstancePerLifetimeScope();
     builder.RegisterType <TestClass>().AsSelf().PropertiesAutowired().SingleInstance();
     builder.RegisterType <TestClass2>().AsSelf().PropertiesAutowired().SingleInstance();
 }
Esempio n. 3
0
 public static IContainerManager Initialize(SmartConfig config = null, bool forceRecreate = false)
 {
     if (Singleton <IContainerManager> .Instance == null || forceRecreate)
     {
         var container = new ContainerManager();
         container.Initialize(config);
         Singleton <IContainerManager> .Instance = container;
     }
     return(Singleton <IContainerManager> .Instance);
 }
Esempio n. 4
0
        /// <summary>
        /// 初始化组件和插件。
        /// </summary>
        /// <param name="config">配置对象</param>
        public void Initialize(SmartConfig config)
        {
            // 设置配置文件
            if (config == null)
            {
                config = new SmartConfig();
            }
            // 注册依赖
            RegisterDependencies(config);

            // 启动时运行的任务
            if (!config.IgnoreStartupTasks)
            {
                RunStartupTasks();
            }
        }
        [MethodImpl(MethodImplOptions.Synchronized)]// 同步方式执行该方法
        public static IContainerManager InitializeMvc(this Core.SmartContext context, SmartConfig config = null, bool forceRecreate = false)
        {
            // 删除不必要的HTTP响应头 "X-AspNetMvc-Version"
            MvcHandler.DisableMvcResponseHeader = true;

            var icm = Core.SmartContext.Initialize(config, forceRecreate);
            var cm  = icm as ContainerManager;

            if (cm != null)
            {
                DependencyResolver.SetResolver(new AutofacDependencyResolver(cm._container));
            }

            System.Web.Mvc.ViewEngines.Engines.Clear();
            System.Web.Mvc.ViewEngines.Engines.Add(new SmartRazorViewEngine());

            return(cm);
        }
Esempio n. 6
0
        /// <summary>
        /// 依赖注册
        /// </summary>
        /// <param name="config">配置对象</param>
        protected virtual void RegisterDependencies(SmartConfig config)
        {
            // 初始化容器
            var builder = new Autofac.ContainerBuilder();

            #region 注册依赖实例

            builder.RegisterInstance(config).As <SmartConfig>().SingleInstance();
            builder.RegisterType <DefaultDependencyResolver>().As <IDependencyResolver>().SingleInstance();
            builder.RegisterInstance(config.TypeFinder).As <ITypeFinder>().SingleInstance();
            builder.RegisterInstance(this).As <IContainerManager>().SingleInstance();
            builder.RegisterType <Caching.HttpCache>().Named <Caching.ICache>(SmartContext.DEFAULT_CACHE_KEY).SingleInstance();
            builder.RegisterInstance(new Export.HtmlExcelExport()).As <Export.IExport>().SingleInstance();

            #endregion

            #region 注册实现 IDependency 接口的依赖类型

            var dependencies = config.TypeFinder.ForTypesDerivedFrom <IDependency>().ToList();
            foreach (var dependency in dependencies)
            {
                var reg = builder.RegisterType(dependency)
                          .AsImplementedInterfaces() // 注册所有接口
                          .PropertiesAutowired()     // 自动属性注入
                ;
                if (typeof(ISingletonDependency).IsAssignableFrom(dependency))
                {
                    reg.SingleInstance();
                }
                else if (typeof(ITransientDependency).IsAssignableFrom(dependency))
                {
                    reg.InstancePerDependency();
                }
                else
                {
                    reg.InstancePerLifetimeScope();
                }
            }

            #endregion

            #region 注册其他程序集所提供的依赖关系(实现 IDependencyRegistrar 接口的类)

            var drInstances = config.TypeFinder.ForTypesDerivedFrom <IDependencyRegistrar>()
                              .ToInstances <IDependencyRegistrar>()
                              .OrderBy(t => t.Order)
                              .ToList();
            foreach (var dependencyRegistrar in drInstances)
            {
                dependencyRegistrar.Register(builder, config);
            }

            #endregion

            this._container = builder.Build();
            // 注册完成后处理
            if (config.OnDependencyRegistered != null)
            {
                config.OnDependencyRegistered(this._container);
            }
        }
Esempio n. 7
0
 public void Register(ContainerBuilder builder, SmartConfig config)
 {
     //Controllers
     builder.RegisterFilterProvider();
     builder.RegisterControllers(config.TypeFinder.Assemblies.ToArray());
 }