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

相关文章: