之前看過一個帖子,他用的.net core2.2給出兩種方法,我整理到了下邊,自己寫了一下,發現兩種寫法在.net core 3.0中都不支持,然后查了一些資料在最下邊整理出來3.0的寫法 歡迎學習交流
1.環境: .net core 2.2
nuget 安裝:
Autofac
Autofac.Extensions.DependencyInjection
第一種方法:
新建類:AutofacModule
using Autofac; using IService2; using Service2; using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; namespace WebApplication2 { public class AutofacModule: Module { protected override void Load(ContainerBuilder builder) { builder.RegisterType<UserInfoService>().As<IUserInfoService>(); builder.RegisterType<TestService>().As<ITestService>(); } } }
Startup類中: 返回 IServiceProvider
public IServiceProvider ConfigureServices(IServiceCollection services) { services.Configure<CookiePolicyOptions>(options => { // This lambda determines whether user consent for non-essential cookies is needed for a given request. options.CheckConsentNeeded = context => true; options.MinimumSameSitePolicy = SameSiteMode.None; }); services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2); // Add Autofac 第一種方式,使用AutofacModule配置文件 var containerBuilder = new ContainerBuilder(); containerBuilder.RegisterModule<AutofacModule>(); containerBuilder.Populate(services); var container = containerBuilder.Build(); return new AutofacServiceProvider(container); }
第二種方法:
public IServiceProvider ConfigureServices(IServiceCollection services) { services.Configure<CookiePolicyOptions>(options => { // This lambda determines whether user consent for non-essential cookies is needed for a given request. options.CheckConsentNeeded = context => true; options.MinimumSameSitePolicy = SameSiteMode.None; }); services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);// Add Autofac 第二種方式 自動注冊該程序集下的所有接口 var containerBuilder = new ContainerBuilder(); //自動注冊該程序集下的所有接口 //Service2 為程序集命名空間 服務層非接口層 //InstancePerLifetimeScope:同一個Lifetime生成的對象是同一個實例 //SingleInstance:單例模式,每次調用,都會使用同一個實例化的對象;每次都用同一個對象; //InstancePerDependency:默認模式,每次調用,都會重新實例化對象;每次請求都創建一個新的對象; containerBuilder.RegisterAssemblyTypes(Assembly.Load("Service2")).AsImplementedInterfaces().InstancePerLifetimeScope(); containerBuilder.Populate(services); var container = containerBuilder.Build(); return new AutofacServiceProvider(container); }
2.環境: .net core 3.0 preview5
nuget 安裝:
Autofac
Autofac.Extensions.DependencyInjection
Program類中
public class Program { public static void Main(string[] args) { CreateHostBuilder(args).Build().Run(); } public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .ConfigureWebHostDefaults(webBuilder => { webBuilder.UseStartup<Startup>(); }) //Wire up autofac .UseServiceProviderFactory(new AutofacServiceProviderFactory()); }
Startup類中
// This method gets called by the runtime. Use this method to add services to the container. public void ConfigureServices(IServiceCollection services) { services.Configure<CookiePolicyOptions>(options => { // This lambda determines whether user consent for non-essential cookies is needed for a given request. options.CheckConsentNeeded = context => true; }); services.AddControllersWithViews() .AddNewtonsoftJson(); services.AddRazorPages(); } public void ConfigureContainer(ContainerBuilder containerBuilder) { //wire up using autofac specific APIs here containerBuilder.RegisterType<UserInfoService>().As<IUserInfoService>().InstancePerLifetimeScope(); containerBuilder.RegisterType<TestService>().As<ITestService>().InstancePerLifetimeScope(); }