1、Autofac的配置
ASP.NET Core 1.1引入了具有强类型容器配置的能力。 它提供了一个ConfigureContainer
方法,您可以使用Autofac单独注册,而不是使用ServiceCollection
注册。
1)安装Autofac的Nuget包
在Nuget管理程序中,搜索'Autofac.Extensions.DependencyInjection
' =》选中然后点击'安装
'
2)使用ConfigureContainer配置
- 在配置
WebHostBuilder
的Program.Main
方法中,调用AddAutofac
将Autofac挂钩到启动管道中。 - 在
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