Autofac生命周期 和各种注入

本文介绍了Autofac的四种生命周期:瞬态(InstancePerDependency)、单例(SingleInstance)、作用域(InstancePerLifetimeScope)和指定作用域(InstancePerMatchingLifetimeScope)。同时展示了多种注入方式:抽象与具体类注册、注册具体实例、业务逻辑注入(Lambda)、泛型注入(RegisterGeneric)以及程序集注入(RegisterAssemblyOpenGenericTypes)。

作者:zhuge···预计阅读 9 分钟·650 阅读·0 评论
Autofac生命周期 和各种注入
//builder.RegisterType<TestA>().As<ITestA>().InstancePerDependency();//瞬态
//builder.RegisterType<TestB>().As<ITestB>().SingleInstance();//单例
//builder.RegisterType<TestC>().As<ITestC>().InstancePerLifetimeScope();//作用域,应用域
//builder.RegisterType<TestD>().As<ITestD>().InstancePerMatchingLifetimeScope("TEST");指定作用域,指定应用域


ContainerBuilder containerBuilder = new ContainerBuilder();

//注册抽像与具体类 containerBuilder.RegisterType<MainClass>().As<IMainClass>(); IContainer container = containerBuilder.Build(); IMainClass mainClass = container.Resolve<IMainClass>();

//注册具体实例 containerBuilder.RegisterInstance(new MainClass(new ChildClass())); IContainer container = containerBuilder.Build(); IMainClass mainClass = container.Resolve<IMainClass>();

//业务逻辑注入 containerBuilder.Register<IMainClass>(     context =>     {         IChildClass childClass = context.Resolve<IChildClass>();         IMainClass mainClass1 = new MainClass(childClass);         return mainClass1;     });

//泛型注入 containerBuilder.RegisterGeneric(typeof(List<>)).As(typeof(IList<>)); IContainer container = containerBuilder.Build(); IList<MainClass> mainClasses = container.Resolve<IList<MainClass>>(); //count= 0

containerBuilder.RegisterGeneric(typeof(List<>)).As(typeof(IList<>)); containerBuilder.RegisterType<MainClass>().As<IMainClass>(); IContainer container = containerBuilder.Build(); IList<IMainClass> mainClasses = container.Resolve<IList<IMainClass>>(); //count= 1

//程序集注入 Assembly interfaceAssbly = Assembly.LoadFrom("MBS.IConsoleApp.dll"); Assembly servicesAssbly = Assembly.LoadFrom("MBS.ConsoleApp.dll"); containerBuilder.RegisterAssemblyOpenGenericTypes(interfaceAssbly, servicesAssbly).AsImplementedInterfaces(); IContainer container = containerBuilder.Build(); IMainClass mainClass = container.Resolve<IMainClass>();


相关文章

评论

加载中...