默认支持构造函数注入,如果需要属性注入,对比构造函数注入,属性注入就多追加了 **PropertiesAutowired() **函数
注意:属性注入记得将属性的访问修饰符改为注册类可访问的修饰符,否则会注入失败。
如果不是public 则会抛出空引用。
原因大概就是 Controller 是由 Mvc 模块管理的,不在 IOC 容器内,所以在 Controller 中无法使用 Autofac 注入的实例。
services.Replace(ServiceDescriptor.Transient<IControllerActivator, ServiceBasedControllerActivator>());
builder.RegisterTypes(GetAssemblyTypes<Startup>(type => typeof(ControllerBase).IsAssignableFrom(type))) .PropertiesAutowired();
将默认ServiceProviderFactory指定为AutofacServiceProviderFactory
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBu
前两节针对.NetCore自带的依赖注入进行简要概述,对于日常开发的需求应该是能满足了,那为什么还需要引入第三方依赖注入组件呢,这里就从自带的依赖注入来分析,有什么样的需求满足不了?主要归纳为以下几点:
属性注入:自带的依赖注入不支持属性注入方式,而现阶段开发,属性开发模式应该在程序中无处不在了;
按名称注入:自带的依赖注入不支持名称注入,当注入多个同接口的不同实现时,要获取指定类型的对象不太方便,但通过名称可以方便获取;
注册方式:自带的依赖注入需要指定具体类型,这样每增加一个新类型就要添加
第一步:在Nuget中安装Autofac包
第二步:在Nuget中安装Autofac.Extensions.DependencyInjection(MVC项目已经默认安装了,控制台应用程序需要安装)
tartup类
在Startup类中,将ConfigureServices方法的返回值修改成IServiceProvider,
然后在这个方法中添加我们自定义...
(2)Program类中添加如下代码
builder.Host.UseServiceProviderFactory(new AutofacServiceProviderFactory())//Step 1:容器替换
.ConfigureContainer<ContainerBuilder>(builder =>
//服务层程序集命名空间
Assembly userS...
通常我们写程序时所有的对象都由我们手动的new出来,这样项目之间互相依赖,各个模块之间耦合严重,当需要修改为其他实现类时非常麻烦。通过IOC可以解除依赖,让代码结构看起来更加合理,并能够提升项目的稳定性和可用性。
Autofac是IOC(Inversion of Control,控制反转)容器的一种,使用IOC容器一般建议基于接口编程。在使用的时候声明接口类型的变量、属性是由容器负责赋值...
1、哈喽大家中秋节(后)好呀!感觉已经好久没有写文章了,但是也没有偷懒哟,我的视频教程《系列一、NetCore 视频教程(Blog.Core)》也已经录制八期了,还在每周末同步更新中,欢迎大家多多指教。
2、除此之外呢,我也在平时的时间帮朋友开发了一个小项目,就是使用 .net mvc+vue+ele+mongo 框架写的项目,之前一直想着用mvc结合着vue写,这次也终于...
在 .NET 4.6 中使用 Autofac 与上面的示例类似,只需要稍微修改一下容器的创建方式即可。
1. 引入 Autofac 库。可以使用 NuGet 包管理器搜索并安装 Autofac。
2. 创建容器并注册服务和依赖关系:
```csharp
var builder = new ContainerBuilder();
// 注册服务
builder.RegisterType<MyService>().As<IMyService>();
// 注册控制器
builder.RegisterType<MyController>();
// 创建容器
var container = builder.Build();
3. 在需要使用依赖注入的地方,我们可以通过容器解析所需要的对象:
```csharp
var myService = container.Resolve<IMyService>();
var myController = container.Resolve<MyController>();
4. 当然,我们也可以通过构造函数注入所需要的依赖:
```csharp
public class MyController
private readonly IMyService _myService;
public MyController(IMyService myService)
_myService = myService;
// ...
在 .NET 4.6 中使用 Autofac 的方式与 .NET Core 中略有不同,但主要思路是相同的。需要注意的是,Autofac 在 .NET 4.6 中需要引入 System.Runtime.CompilerServices.Unsafe 库,否则会编译错误。