ASP .NET Core中依賴注入框架(DI)Autofac 4.0通過ConfigureContainer配置和使用示例


 
 
本文主要介紹ASP .NET Core中依賴注入框架(DI)Autofac 4.0通過ConfigureContainer配置和使用示例。

1、Autofac的配置

ASP.NET Core 1.1引入了具有強類型容器配置的能力。 它提供了一個ConfigureContainer方法,您可以使用Autofac單獨注冊,而不是使用ServiceCollection注冊。

1)安裝Autofac的Nuget包

在Nuget管理程序中,搜索'Autofac.Extensions.DependencyInjection' =》選中然后點擊'安裝'

2)使用ConfigureContainer配置

  • 在配置WebHostBuilderProgram.Main方法中,調用AddAutofacAutofac掛鈎到啟動管道中。
  • Startup類的ConfigureServices方法中,使用其他庫提供的擴展方法將內容注冊到IServiceCollection中。
  • Startup類的ConfigureContainer方法中,將內容直接注冊到AutofacContainerBuilder中。

IServiceProvider將自動為您創建,因此除了注冊外,您無需做任何事情。

2、在ASP .NET Core中使用ConfigureContainer配置Autofac示例代碼

public class Program { public static void Main(string[] args) { //此處的ConfigureServices調用允許 //在Startup with中支持ConfigureContainer //一個強類型的ContainerBuilder。 var host = new WebHostBuilder() .UseKestrel() .ConfigureServices(services => services.AddAutofac()) .UseContentRoot(Directory.GetCurrentDirectory()) .UseIISIntegration() .UseStartup<Startup>() .Build(); host.Run(); } } public class Startup { public Startup(IHostingEnvironment env) { var builder = new ConfigurationBuilder() .SetBasePath(env.ContentRootPath) .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true) .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true) .AddEnvironmentVariables(); this.Configuration = builder.Build(); } public IConfigurationRoot Configuration { get; private set; } //在ConfigureServices中注冊依賴項。 //在下面的ConfigureContainer方法之前由運行時調用。 public void ConfigureServices(IServiceCollection services) { //將服務添加到集合中。 不建造或返回 //任何IServiceProvider或ConfigureContainer方法 //不會被調用。 services.AddMvc(); } //您可以在ConfigureContainer中直接注冊內容 //使用Autofac。 這在ConfigureServices之后運行 //這里將覆蓋在ConfigureServices中進行的注冊。 //不要建造容器; 為你做完了。 如果你 //需要對容器的引用,你需要使用 //后面會顯示“沒有ConfigureContainer”機制。 public void ConfigureContainer(ContainerBuilder builder) { builder.RegisterModule(new AutofacModule()); } //配置是添加中間件的位置。 這稱之為 // ConfigureContainer。 您可以使用IApplicationBuilder.ApplicationServices //如果你需要從容器中解決問題。 public void Configure( IApplicationBuilder app, ILoggerFactory loggerFactory) { loggerFactory.AddConsole(this.Configuration.GetSection("Logging")); loggerFactory.AddDebug(); app.UseMvc(); } }



1.首先nuget引入

Autofac

Autofac.Extensions.DependencyInjection

2.修改Program.cs 添加.UseServiceProviderFactory(new AutofacServiceProviderFactory())

復制代碼
    public class Program
    {
        public static void Main(string[] args)
        {
            CreateHostBuilder(args).Build().Run();
        }

        public static IHostBuilder CreateHostBuilder(string[] args) =>
            Host.CreateDefaultBuilder(args)
                .UseServiceProviderFactory(new AutofacServiceProviderFactory())
                .ConfigureWebHostDefaults(webBuilder =>
                {
                    webBuilder.UseStartup<Startup>();
                });
    }
復制代碼

3.修改Startup.cs

添加 services.AddControllersWithViews().AddControllersAsServices(); 

        public void ConfigureServices(IServiceCollection services)
        {
        services.AddControllersWithViews().AddControllersAsServices();
        }    

添加

1
2
3
4
public  void  ConfigureContainer(ContainerBuilder builder)
{
     // 在這里添加服務注冊
}<br><br><br>

完成現在就可以在控制器中注入方法了。

 


public void ConfigureContainer(ContainerBuilder builder)
{
var assemblysServices = Assembly.Load("OmsServer");//模式是 Load(解決方案名)//要記得!!!這個注入的是實現類層,不是接口層!不是 IServices
builder.RegisterAssemblyTypes(assemblysServices).Where(t => t.Name.EndsWith("Service")).AsImplementedInterfaces();//指定已掃描程序集中的類型注冊為提供所有其實現的接口。
}

原文:https://www.cnblogs.com/lr215/p/11600577.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM