.net 6手撸Wsk框架之五:使用Autofac实现依赖注入

 Autofac的简单使用:

 

由于将来可能引用很多包,为了保持统一队形,我们再新建一个类库项目Wsk.Core.Package,当做包的引用集合:

 .net 6手撸Wsk框架之五:使用Autofac实现依赖注入

删掉Class1,Wsk.CoreWsk.Core.Filter里面到包删掉,引用到Package里面,然后需要用到包的项目,都引用package这个类库项目。这样可以防止将来项目多了,版本环境如果不一致导致的版本冲突。更改以后的目录架构:

 .net 6手撸Wsk框架之五:使用Autofac实现依赖注入

 

添加依赖注入的两个关键包:Autofac.Extensions.DependencyInjection 和 Autofac.Extras.DynamicProxy

 

 .net 6手撸Wsk框架之五:使用Autofac实现依赖注入

 

然后在Program添加Autofac的支持:

 .net 6手撸Wsk框架之五:使用Autofac实现依赖注入

接着,新建一个类库项目,例如叫做 Wsk.Core.Service,然后新建一个类,叫做TestAutofac,以及对应的接口 ITestAutofac,以及一个方法叫做Test,用于做依赖注入实现的测试使用:

 .net 6手撸Wsk框架之五:使用Autofac实现依赖注入

 

.net 6手撸Wsk框架之五:使用Autofac实现依赖注入

接下来,在启动项目里面添加该依赖项目,然后在Startup里面的ConfigureServices方法里面,添加对ITestAutofac的单例注册实现:

 .net 6手撸Wsk框架之五:使用Autofac实现依赖注入

 

改写先前的WSK控制器,添加构造函数的依赖注入,以及修改或新增一个用于测试的方法,此处改写了HelloWorld方法,为了看出效果,只打印以上方法的输出内容:

.net 6手撸Wsk框架之五:使用Autofac实现依赖注入 

 

测试一下效果:执行程序,并在swagger上面手动调用:

 .net 6手撸Wsk框架之五:使用Autofac实现依赖注入

显示预期内容,代表依赖注入成功。

接下来,使用注入整个类库来实现依赖注入,用于接口和类很多的情况下,为了方便,就可以把类库下面的所有接口全部暴露出来进行依赖注入。

在启动项目里面,新建一个文件夹,叫Common,在里面新建类AutofacRegister,并继承Autofac.Module ,在类下面重写 Load 方法:

 .net 6手撸Wsk框架之五:使用Autofac实现依赖注入

 

startup里面,注释掉上面的实现方法,新建ConfigureContainer容器:

 .net 6手撸Wsk框架之五:使用Autofac实现依赖注入

 

最后进行启动测试

 .net 6手撸Wsk框架之五:使用Autofac实现依赖注入

测试成功,完结撒花~~

 

最后总结一点东西:

AddSingleton(),只在首次请求会创建服务,后续所有请求都会使用该实例。

AddScoped(),不同的请求,实例不同。

AddTransient(),临时服务,每次请求都会创建一个新的服务实例

 

本篇章有关源码如下:

 AutofacRegister

.net 6手撸Wsk框架之五:使用Autofac实现依赖注入
public class AutofacRegister: Autofac.Module
    {
        protected override void Load(ContainerBuilder container)
        {
            var assemblysServices = Assembly.Load("Wsk.Core.Service"); // 需要暴露接口所在的程序集
            container.RegisterAssemblyTypes(assemblysServices)
                .SingleInstance()  // 设置单例注入
               .AsImplementedInterfaces() // 把所有接口全暴露出来
               .EnableInterfaceInterceptors(); 
        }
    }
View Code

ConfigureContainer

.net 6手撸Wsk框架之五:使用Autofac实现依赖注入
public void ConfigureContainer(ContainerBuilder container)
        {
            container.RegisterModule(new AutofacRegister());
        }
View Code

TestAutofac 、ITestAutofac

.net 6手撸Wsk框架之五:使用Autofac实现依赖注入
 public class TestAutofac:ITestAutofac
    {
        public void Test()
        {
            Console.WriteLine("This is Autofac Test ……");
        }
    }
View Code
.net 6手撸Wsk框架之五:使用Autofac实现依赖注入
public interface ITestAutofac
    {
        void Test();
    }
View Code

 

最后,如果觉得有帮助,还请各位大大们赏口饭吃~~万分感谢!

.net 6手撸Wsk框架之五:使用Autofac实现依赖注入

 

也可以加QQ群一起探讨人生:

群号:1079830632

 

.net 6手撸Wsk框架之五:使用Autofac实现依赖注入

上一篇:阿里云高性价比活动云服务器推荐:2核4G1M配置仅200元


下一篇:.net core 后台接收 ajax/接口请求 参数