AutoFac自动注入的实现过程

 

IDependency 依赖注入接口,表示该接口的实现类将自动注册到IoC容器中

 

//autofac
builder.Host.UseServiceProviderFactory(new AutofacServiceProviderFactory());
builder.Host.ConfigureContainer<ContainerBuilder>(builder =>
{
    #region 手动注入

    ////手动注入
    //builder.RegisterType<AService>().As<IAService>().InstancePerLifetimeScope();
    //builder.RegisterType<BService>().As<IBService>().InstancePerLifetimeScope();

    #endregion

    #region 自动注入

    //4、自动注册接口
    //* 筛选出对应条件的接口
    //* IsAssignableFrom:返回true的条件:是否直接或间接实现了IDependency
    //* IsAbstract:是否为抽象类
    //* AsImplementedInterfaces:以接口的形式注册
    //* InstancePerLifetimeScope:同一个Lifetime生成的对象是同一个实例

    //Assembly assembly = Assembly.Load(Assembly.GetExecutingAssembly().GetName().Name);
    //var dataAccess = Assembly.GetExecutingAssembly();
    //var assemblies = AppDomain.CurrentDomain.GetAssemblies().ToList();//这种写法AppDomain重新启动后会丢失程序集

    ////第一种
    /* 获取接口类型
    *通过IDependency标记需要依赖注入的接口
    *注册所有实现了IDependency接口的类型
    */
    //Type type = typeof(IDependency);
    //var dataAccess = Assembly.GetExecutingAssembly();

    //builder.RegisterAssemblyTypes(Assembly.Load("Dn.Core.Services"))
    //       .Where(t => t.Name.EndsWith("Service"))//.As<IDependency>()
    //       .AsImplementedInterfaces().InstancePerDependency();

    ////第二种
    //Type baseType = typeof(IDependency);
    ////var assemblies = AppDomain.CurrentDomain.GetAssemblies().ToList();//这种写法AppDomain重新启动后会丢失程序集
    //var assembly = Assembly.Load("Dn.Core.Services");//Assembly.GetEntryAssembly();
    //builder.RegisterAssemblyTypes(assembly)
    //                .Where(t => baseType.IsAssignableFrom(t) && t != baseType)
    //                .AsImplementedInterfaces().InstancePerLifetimeScope();

    #endregion
});
net6

 

但是实际上,很多项目都会把项目分到其他的类库里面,如果使用Assembly.GetEntryAssembly();,放到其他的项目里面的可以被注入的类就无法被注入了,所以需要手动去加载其他的程序集,当然也可以用代码去扫描一下,

AssemblyLoadContext.Default.LoadFromAssemblyName(new AssemblyName("程序集名称"));
autofac的RegisterAssemblyTypes方法参数是一个数组,把需要注入的程序集加载起来,拼成一个数组,传递进去就可以实现在.Net Core下的跨程序集加载了

https://www.cnblogs.com/boxrice/p/8301666.html

https://blog.csdn.net/weixin_39926042/article/details/112812936?spm=1001.2101.3001.6650.10&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ELandingCtr%7EHighlightScore-10.queryctrv2&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ELandingCtr%7EHighlightScore-10.queryctrv2&utm_relevant_index=11

posted @ 2022-02-07 10:38  bxzjzg  阅读(346)  评论(0编辑  收藏  举报