2021-04-03 乐帮网
netcore autofac
这里介绍如何在ASP.NET Core 3.0以后使用属性注入,和以往的Net core2.0完全不同,如何按钮以前的方法启用注入的话肯定不生效。通过网上学习和从官网查看,特总结了在 Net Core3.0下启用属性注入的方法。这里我们使用MVC为例进行说明,Razor Pages 项目也是一样的,没有区别。
首先基础知识可以参考官网:https://autofaccn.readthedocs.io/en/latest/integration/aspnetcore.html
下面开始我们的注入旅。
(1)新建一个Net Core的MVC项目,并引入两个Nuget包。
Autofac
Autofac.Extensions.DependencyInjection
我是直接安装的最新版 autfac 6.1
(2)修改Program文件
添加UseServiceProviderFactory(new AutofacServiceProviderFactory())
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
}).UseServiceProviderFactory(new AutofacServiceProviderFactory());
(3)建立一个测试用映射类 IUserRepository 和 UserRepository
public class UserModel
{
public string Name { get; set; }
}
public interface IUserRepository
{
public UserModel GetOne();
}
public class UserRepository : IUserRepository
{
public UserModel GetOne()
{
return new UserModel {Name= "Timmy" };
}
}
(4)新建映射配置类
//https://lebang2020.cn/details/2104035qtvwy0z.html
public class AutofacConfigModule : Module
{
protected override void Load(ContainerBuilder builder)
{
builder.RegisterType<UserRepository>().As<IUserRepository>();
var controllersTypesInAssemblyTypes = typeof(Program).Assembly.GetExportedTypes().Where(type => typeof(ControllerBase).IsAssignableFrom(type)).ToArray();
builder.RegisterTypes(controllersTypesInAssemblyTypes).PropertiesAutowired();
}
}
(5)修改Startup文件
添加 AddControllersAsServices
public void ConfigureServices(IServiceCollection services)
{
services.AddControllersWithViews().AddControllersAsServices();
}
添加配置方法
public void ConfigureContainer(ContainerBuilder builder)
{
builder.RegisterModule(new AutofacConfigModule());
}
(6)验证注入在HomeController中添加属性
public IUserRepository UserRepository{ get;set;}
public class HomeController : Controller
{
private readonly ILogger<HomeController> _logger;
public IUserRepository UserRepository { get; set; }
public HomeController(ILogger<HomeController> logger)
{
_logger = logger;
}
public IActionResult Index()
{
var user = UserRepository.GetOne();
return View();
}
public IActionResult Privacy()
{
return View();
}
[ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)]
public IActionResult Error()
{
return View(new ErrorViewModel { RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier });
}
}
最后运行调试,就发现能正常运行了。
同时提供示例代码下载,链接:https://pan.baidu.com/s/1XTwNVXckrHpi6Ss1O0JSiQ
关注我的微信公众号
在公众号里留言交流
投稿邮箱:1052839972@qq.com
庭院深深深几许?杨柳堆烟,帘幕无重数。
玉勒雕鞍游冶处,楼高不见章台路。
雨横风狂三月暮。门掩黄昏,无计留春住。
泪眼问花花不语,乱红飞过秋千去。
如果感觉对您有帮助
欢迎向作者提供捐赠
这将是创作的最大动力