草庐IT

AutoFac

Zhuo-Hu 2023-03-28 原文

AutoFac的配置使用

一.什么是AutoFac

第三方IOC容器

二.优点

  • 它是C#语言联系很紧密,也就是说C#里的很多编程方式都可以为Autofac使用,例如可以用Lambda表达式注册组件

  • 较低的学习曲线,学习它非常的简单,只要你理解了IoC和DI的概念以及在何时需要使用它们

  • XML配置支持

  • 自动装配

  • 与Asp.Net MVC 3集成

  • 微软的Orchad开源程序使用的就是Autofac,从该源码可以看出它的方便和强大

    三.使用

第一步:Negut包下载AutoFac和Autofac.Extensions.DependencyInjection

第二步:自定义一个类,方便对注入服务进行管理(AutoFacModelRegister)
步骤:1.继承Autofac.Module
2.//重写管道load方法,进行注册注入
3.在这里需要注意,必须让自己的程序集在api下面的ben可以找到,需要在依赖项找到程序集打开

代码实现
点击查看代码
public class AutoFacModelRegister:Autofac.Module
    {
        //重写管道load方法,进行注册注入
        protected override void Load(ContainerBuilder builder)
        {
            //程序集注入业务服务(通过反射的方法动态获取程序集,"Repository","service"都需要注册)
            //Load:加载程序集(自己项目的程序集名称)
            Assembly? IAppServices = Assembly.Load("RBAC.Exam.Repository");
            //var AppServices = Assembly.Load("Service");
            //根据名称约定(服务层的接口和实现均以Repository结尾),实现服务接口和服务实现的依赖
            builder.RegisterAssemblyTypes(IAppServices)
            //(带有指定后缀的文件)
              .Where(t => t.Name.EndsWith("Repository"))
              //开放接口,注入
              .AsImplementedInterfaces();
        //单个注册
        builder.RegisterType(typeof(JwtSecurityTokenHandler)).SingleInstance();
        builder.RegisterType(typeof(TokenHelper)).SingleInstance();
    }
}
</details>
第三步:在Program.cs进行配置
builder.Host.UseServiceProviderFactory(new AutofacServiceProviderFactory())
    .ConfigureContainer<ContainerBuilder>(builder =>
    {
    	//此处AutoFacModelRegister为自己第二步创建的类
        builder.RegisterModule<AutoFacModelRegister>();
    });

有关AutoFac的更多相关文章

  1. windows - Windows 服务中带有 Autofac 的 NHibernate session 处理程序 - 2

    我有一个Mvc系统,可以与NHibernate和Autofac一起正常工作...我这样做是为了管理NHsession:publicstaticvoidInit(Assemblyassembly){varbuilder=newContainerBuilder();builder.RegisterControllers(assembly);builder.Register(x=>NHibernateInitializer.BuildSessionFactory()).SingleInstance();builder.Register(x=>x.Resolve().OpenSession()

  2. windows - Autofac 与 MEF 集成 - 2

    我需要帮助。我使用Autofac容器创建Windows服务。我使用MEF集成服务为我的服务创建多个替代组件。例如:模块1[Export(typeof(IClass1))]publicclassClass1:IClass1{publicvoidShow(){Console.WriteLine("HallofromClass1");}}模块2[Export(typeof(IClass2))]publicclassClass2:IClass2{publicvoidShow(){Console.WriteLine("HallofromClass2");}}模块集成的基本类-示例classPro

  3. c# - Autofac:如何在不绕过 IoC 容器的情况下限制 IDisposable 对象的生命周期 - 2

    我目前正在学习如何使用Autofac,而且我一直坚持处理IDisposable对象确定性。在我陈述我的问题之前,让我先介绍一下情况。起始位置:假设我的对象模型是通过以下接口(interface)定义的:interfaceIApple:IDisposable{voidConsume();}interfaceIHorse{voidEat(IAppleapple);//issupposedtocallapple.Consume()}interfaceIHorseKeeper{voidFeedHorse();//issupposedtocallhorse.Eat(apple)//where'h

  4. c# - 在我的项目中仅针对 Owned<T> 引用 Autofac 是不是糟糕的设计? - 2

    我最近成为Autofac的OwnedInstances功能的重度用户。例如,我用它来提供一个工厂来为我的数据库创建一个工作单元,这意味着我依赖于UnitOfWork工厂的类正在请求以下类型的对象:Func>这非常有用——非常适合keepingIDisposableoutofmyinterfaces--但它是有代价的:因为Owned是Autofac程序集的一部分,我必须在我的每个知道Owned的项目中引用Autofac,并在每个代码中加入“usingAutofac.Features.OwnedInstances”文件。Func具有构建到.NET框架中的巨大好处,因此我毫不怀疑将Func用

  5. c# - 使用 Autofac 注册容器本身 - 2

    我想知道在自身内部注册容器是否有任何副作用IContainercontainer;ContainerBuilderbuilder=newContainerBuilder();container=builder.Build();builder.RegisterInstance(container).As();像这样使用它builder.RegisterType().As().WithParameter(newResolvedParameter((pi,ctx)=>pi.ParameterType==typeof(IContainer)&&pi.Name=="Container",(pi,

  6. c# - 我可以像在 Autofac 中那样在 Unity 中的模块中注册我的类型吗? - 2

    我对Autofac相当熟悉,我非常喜欢Autofac的一项功能是模块注册。有谁知道我如何使用Unity做到这一点?我很难找到在Google中使用哪些术语来得出统一等价物(如果有的话)。publicclassGlobal:HttpApplication,IContainerProviderAccessor{privatestaticIContainerProvider_containerProvider;protectedvoidApplication_Start(objectsender,EventArgse){varbuilder=newContainerBuilder();buil

  7. c# - 如何在 Autofac 注册中调用异步方法? - 2

    我想调用awaitableasync注册过程中的方法是这样的://buildervariablecontainsAutofacContainerBuilderbuilder.Register((async(context,parameters)=>//needasynchere{varsomeClass=newSomeClass(context.Resolve());awaitsomeClass.SomeAsyncInitMethod();//needtoawaitresultreturnsomeClass;})).As().SingleInstance();SomeClass工具IS

  8. c# - Autofac:注册组件并根据解析父解析 - 2

    我想注册一个组件,以根据它可能解析的类使用参数进行解析。(这听起来有点令人困惑,所以我将展示一个示例)。这是一个使用记录器的对象:classMyObject:IMyObject{publicILoggerLogger;publicMyObject(ILoggerlogger){Logger=logger;}}现在传入的记录器可能因类而异。所以我对如何在下面做到这一点有一个相当修补的想法:classMyLogger:ILogger{publicstringName{get;protectedset;}publicstaticILoggerGetLogger(stringclassName

  9. c# - 如何在 Autofac 中获取所有注册的服务类型 - 2

    我有一个Autofac容器,我希望能够检索所有已注册的服务类型(不是实现类型,而是它们注册的类型)。如何从IComponentContext中获取此信息? 最佳答案 你可以使用这个:varservices=context.ComponentRegistry.Registrations.SelectMany(x=>x.Services).OfType().Select(x=>x.ServiceType); 关于c#-如何在Autofac中获取所有注册的服务类型,我们在StackOverfl

  10. c# - 如何在 Autofac 中注册这些类 - 2

    我正在使用autofac作为Ioc容器。我有三个类(class):classService{publicService(Repositoryrep,UnitOfWorkcontext){}}ClassRepository{publicRepository(UnitOfWorkcontext){}}classUnitOfWork{}Service和Repository需要相同的UnitOfWork实例该怎么做?以及如何在XmlConfiguration中编写它 最佳答案 编辑:我误读了这个并认为这是一个关于如何使用autofac注册依

随机推荐