标签:总结 AutoFac Resolve RegisterType builder AutofacModule 注册 使用 new
因为微软系都会内置许多现有技术(如依赖注入等),我也一直没有去学习第三方的,但是现在看来是有必要学习一下的。
1. 替换内置Ioc容器
引用Nuget AutoFac、Autofac.Extensions.DependencyInjection。
//Program.cs
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureServices(service => service.AddAutofac()) //替换内置Ioc
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
});
//Startup.cs
//添加ConfigureContainer方法
public void ConfigureContainer(ContainerBuilder builder)
{
//采用模块方式
builder.RegisterModule(new AutofacModule());
}
//新建AutofacModule.cs文件
public class AutofacModule : Module //“Module”引用至using Autofac
{
protected override void Load(ContainerBuilder builder)
{
//服务注入
}
}
2. 服务注入
//AutofacModule.cs
protected override void Load(ContainerBuilder builder)
{
builder.RegisterType<ArticleService>().As<IArticleService>(); //默认使用多例
builder.RegisterType<ArticleService>().As<IArticleService>().SingleInstance(); //单例注册
builder.RegisterType<ArticleService>().As<IArticleService>().InstancePerLifetimeScope(); //作用域注册
//UsingConstructor注册指定参数的构造函数
//默认注册构造函数参数最多的一项
builder.RegisterType<ArticleService>().As<IArticleService>().UsingConstructor();
//在Resolve阶段进行实例化,所以为单例注册
var instance = new ArticleService();
builder.RegisterInstance(instance).As<IArticleService>().ExternallyOwned();
//lambda注册,实现复杂参数
//c.Resolve<>,取出已经注入到容器的类型作为参数
builder.Register(c => new CommonService(c.Resolve<IArticleService>)).As<ICommonService>();
//注册多个实现
builder.Register<ICommonService>((c, p) =>
{
var number = p.Named<string>("number");
if (number == "1")
{
return new CommonService();
}
else
{
return new CommonService1();
}
});
//使用多个实现的注册
var common = _common.Resolve<ICommonService>(new NamedParameter("number", 1));
}
标签:总结,AutoFac,Resolve,RegisterType,builder,AutofacModule,注册,使用,new 来源: https://www.cnblogs.com/ufo233/p/15866623.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。