• Autofac构建


    1.初始化

    using System.Reflection;
    using System.Web;
    using System.Web.Mvc;
    using System.Configuration;
    using System;
    using System.IO;
    using Autofac;
    using Autofac.Core;
    using Autofac.Integration.Mvc; 
    
    public static IContainer RegisterIOC()
            {
                ContainerBuilder builder = new ContainerBuilder();
                //构造函数注入
                builder.RegisterAssemblyTypes(Assembly.GetCallingAssembly()).AsImplementedInterfaces();
                //注入控制器并实现属性注入
                builder.RegisterControllers(Assembly.GetCallingAssembly()).PropertiesAutowired();
                //支持过滤器的属性注入
                builder.RegisterFilterProvider();
    
    builder.RegisterType<AccountService>().As<IAccountService>();
    
    
           var container = builder.Build();
                DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
    
                return container;
    }

    2.在global.asax.cs

    protected void Application_Start()
            {
                AreaRegistration.RegisterAllAreas();
    
                WebApiConfig.Register(GlobalConfiguration.Configuration);
                FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
                RouteConfig.RegisterRoutes(RouteTable.Routes);
                BundleConfig.RegisterBundles(BundleTable.Bundles);
                
                Func<ILifetimeScope, ILifetimeScope> scopeProvider = (ILifetimeScope container) =>
                {
                    if (HttpContext.Current.Items[typeof(ILifetimeScope)] == null)
                    {
                        HttpContext.Current.Items[typeof(ILifetimeScope)] = container.BeginLifetimeScope("AutofacWebRequest");
                    }
    
                    return (ILifetimeScope)HttpContext.Current.Items[typeof(ILifetimeScope)];
                };
    
    scopeProvider (RegisterIOC())
    }

    3.手工获取

     public class BeanFactory
        {
            /// <summary>
            /// 获取Bean
            /// </summary>
            /// <typeparam name="T">获取的实例类型</typeparam>
            /// <returns>获取的实例</returns>
            public static T GetBean<T>()
            {
                try
                {
                    if (System.Web.HttpContext.Current != null)
                    {
                        ILifetimeScope scope = System.Web.HttpContext.Current.Items[typeof(ILifetimeScope)] as ILifetimeScope;
                        if (scope != null)
                        {
                            return scope.Resolve<T>();
                        }
                    }
                }
                catch
                {
                }
    
                return ServiceLocator.Current.GetInstance<T>();
            }
    
            /// <summary>
            /// 获取Bean
            /// </summary>
            /// <param name="type"></param>
            /// <returns></returns>
            public static object GetBean(System.Type type) 
            {
                try
                {
                    if (System.Web.HttpContext.Current != null)
                    {
                        ILifetimeScope scope = System.Web.HttpContext.Current.Items[typeof(ILifetimeScope)] as ILifetimeScope;
                        if (scope != null)
                        {
                            return scope.Resolve(type);
                        }
                    }
                }
                catch
                {
                }
    
                return ServiceLocator.Current.GetInstance (type) ;
            }
        }

    4.参考 http://www.360doc.com/content/14/0620/09/10504424_388250715.shtml

  • 相关阅读:
    Mac下启动Apache
    Mac OS X中配置Apache
    catransition type
    Block
    mysql 复制表结构和表数据的区别 like 和 select
    mysql kill掉所有的锁表的进程 未验证
    MySQL所有函数及操作符
    linux各种复制命令
    Mac mysql 导入导出数据库
    数据库总结
  • 原文地址:https://www.cnblogs.com/zhshlimi/p/8023708.html
Copyright © 2020-2023  润新知