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>()