• 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

  • 相关阅读:
    多线程中,上锁的理解
    sql server 2008 联机丛书
    序列化是线程安全的么
    对象化下的编程——字段
    Dic实现工厂模式
    design principle:java 回调与委派/委托机制(转)
    风筝数据结构学习笔记(2)后序遍历二叉树(非递归)
    风筝数据结构学习笔记(1)利用链式存储结构和递归构建二叉树
    吕震宇老师《设计模式系列》
    吕震宇老师《设计模式随笔系列》
  • 原文地址:https://www.cnblogs.com/zhshlimi/p/8023708.html
Copyright © 2020-2023  润新知