autofac 获取注册后的实例

 

在一些情境下,不想使用构造器获得实例对象,所以...

                                                                                                            

 

DependencyResolver.Current.GetService<ControllerName>();

使用 DependencyResolver,当然,这个只能在Mvc实例化Controller时才会生效,对BLL和DLL接口是没办法获取实例对象的。

所以在注册ioc实例时,需要把ioc容器赋值到全局变量

public  class IocConfig
    {
        public static IContainer ioc_container;
        /// <summary>
        /// Autoface注册依赖配置
        /// </summary>
        /// <param name="assembly"></param>
        public static void RegisterDependencies(Assembly assembly)
        {
            var builder = new ContainerBuilder();
            //builder.RegisterControllers(assembly);

            #region 根据接口自动注册
            //获取IAutoInject的Type
            var baseType = typeof(IIoc);
            //获取所有程序集
            var assemblies = System.Web.Compilation.BuildManager.GetReferencedAssemblies().Cast<Assembly>().ToArray();
            //自动注册接口
            builder.RegisterAssemblyTypes(assemblies).Where(b => b.GetInterfaces().
            Any(c => c == baseType && b != baseType)).AsImplementedInterfaces().InstancePerLifetimeScope();
            //自动注册控制器
            builder.RegisterControllers(assemblies);
           
            #endregion


            //autofac 注册依赖
            IContainer container = builder.Build();
            ioc_container = container;
            DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
        }

    }

之后可以在任意地方手动获取实例:IocConfig.ioc_container.Resolve<IDyUserLoader>()

posted @ 2017-12-14 14:01  第一序列  阅读(2230)  评论(0编辑  收藏  举报