Autofac配置

using Autofac;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Web;
using System.Web.Http;
using Autofac.Integration.Mvc;
using Autofac.Integration.WebApi; namespace WebAutoFac
{
/// <summary>
/// Autofac配置
/// </summary>
public class AutoFacBootStrapper
{
/// <summary>
/// Autofac配置
/// </summary>
public static void CoreAutoFacInit()
{
#region MVC---install-package autofac.mvc5 注意版本 //var builder = new ContainerBuilder(); //SetupResolveRules(builder); ////注册所有的Controllers
//builder.RegisterControllers(Assembly.GetExecutingAssembly()).PropertiesAutowired();
//var container = builder.Build();
//System.Web.Mvc.DependencyResolver.SetResolver(new AutofacDependencyResolver(container)); #endregion #region Webapi和MVC ---install-package autofac.mvc5 install-package autofac.webapi2 注意版本 var builder = new ContainerBuilder();
SetupResolveRules(builder); //注册所有的Controllers
builder.RegisterControllers(Assembly.GetExecutingAssembly()).PropertiesAutowired();
//注册所有的ApiControllers
builder.RegisterApiControllers(Assembly.GetExecutingAssembly()).PropertiesAutowired(); var container = builder.Build();
//注册所有的Controllers
builder.RegisterControllers(Assembly.GetExecutingAssembly()).PropertiesAutowired();
//注册api容器需要使用HttpConfiguration对象
HttpConfiguration config = GlobalConfiguration.Configuration;
config.DependencyResolver = new AutofacWebApiDependencyResolver(container);
System.Web.Mvc.DependencyResolver.SetResolver(new AutofacDependencyResolver(container)); #endregion #region 自动注入 --- 注释 ////创建autofac管理注册类的容器实例
//var builder = new ContainerBuilder();
//HttpConfiguration config = GlobalConfiguration.Configuration;
//Assembly[] assemblies = Directory.GetFiles(AppDomain.CurrentDomain.RelativeSearchPath, "*.dll").Select(Assembly.LoadFrom).ToArray();
////注册所有实现了 IDependency 接口的类型
//Type baseType = typeof(IDependency);
//builder.RegisterAssemblyTypes(assemblies)
// .Where(type => baseType.IsAssignableFrom(type) && !type.IsAbstract)
// .AsSelf().AsImplementedInterfaces()
// .PropertiesAutowired().InstancePerLifetimeScope();
////注册MVC类型
//// builder.RegisterControllers(assemblies).PropertiesAutowired();
////注册Api类型
//builder.RegisterApiControllers(assemblies).PropertiesAutowired();
////builder.RegisterFilterProvider();
//builder.RegisterWebApiFilterProvider(config);
//var container = builder.Build();
////注册api容器需要使用HttpConfiguration对象
//config.DependencyResolver = new AutofacWebApiDependencyResolver(container);
////注册解析
//DependencyResolver.SetResolver(new AutofacDependencyResolver(container)); #endregion //有了 IDependency 这个基接口,我们只需要 Global 中很简单的几行代码,就可以完成整个系统的依赖注入匹配
//ContainerBuilder builder = new ContainerBuilder();
//builder.RegisterGeneric(typeof(Repository<,>)).As(typeof(IRepository<,>));
//Type baseType = typeof(IDependency); //// 获取所有相关类库的程序集
//Assembly[] assemblies = ... //builder.RegisterAssemblyTypes(assemblies)
// .Where(type => baseType.IsAssignableFrom(type) && !type.IsAbstract)
// .AsImplementedInterfaces().InstancePerLifetimeScope();//InstancePerLifetimeScope 保证对象生命周期基于请求
//IContainer container = builder.Build();
//DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
} private static void SetupResolveRules(ContainerBuilder builder)
{
//WebAPI只用引用services和repository的接口,不用引用实现的dll。
//如需加载实现的程序集,将dll拷贝到bin目录下即可,不用引用dll
var iServices = Assembly.Load("IBLL");
var services = Assembly.Load("BLL");
//var iRepository = Assembly.Load("WebAPI.IRepository");
//var repository = Assembly.Load("WebAPI.Repository"); //根据名称约定(服务层的接口和实现均以Services结尾),实现服务接口和服务实现的依赖
builder.RegisterAssemblyTypes(iServices, services)
.Where(t => t.Name.EndsWith("BLL"))
.AsImplementedInterfaces(); ////根据名称约定(数据访问层的接口和实现均以Repository结尾),实现数据访问接口和数据访问实现的依赖
//builder.RegisterAssemblyTypes(iRepository, repository)
// .Where(t => t.Name.EndsWith("Repository"))
// .AsImplementedInterfaces(); //var cont = Assembly.Load("WebAutoFac");
////根据名称约定(服务层的接口和实现均以Services结尾),实现服务接口和服务实现的依赖
//builder.RegisterAssemblyTypes(cont)
// .Where(t => t.Name.EndsWith("Controller"))
// .AsImplementedInterfaces(); ////使用新的覆盖旧的注册DLL-使用UserNew代替UserOld
//builder.RegisterType<BLL.UserBLL>().As<IBLL.IUserBLL>(); }
}
}
using Autofac;
using BLL;
using IBLL;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Reflection;
using System.Web.Http; namespace WebAutoFac.Controllers
{
/// <summary>
///
/// </summary>
[RoutePrefix("User")]
public class UserController : ApiController
{
private IUserBLL _userBll;
private IPeopleBLL _peopleBll; /// <summary>
///
/// </summary>
/// <param name="userBLL"></param>
/// <param name="peopleBll"></param>
public UserController(IUserBLL userBLL, IPeopleBLL peopleBll)
{
_userBll = userBLL;
_peopleBll = peopleBll;
}
/// <summary>
/// 最原始的方式直接new(需添加对BLL层的引用)
/// </summary>
/// <returns></returns>
[HttpGet,Route("Refernce")]
public string GetUserInfoByRefernce()
{
UserBLL userBll = new UserBLL();
var result = userBll.GetUserInfor();
return result;
} /// <summary>
/// 面向接口编程(仍需添加对BLL层的引用)
/// </summary>
/// <returns></returns>
[HttpGet, Route("Interface")]
public string GetUserInfoByInterface()
{
IUserBLL userBll = new UserBLL();
var result = userBll.GetUserInfor();
return result;
}
/// <summary>
/// 接口+反射(只需将BLL层的程序集拷贝进来)
/// </summary>
/// <returns></returns>
[HttpGet, Route("Reflection")]
public string GetUserInfoByReflection()
{
Assembly ass = Assembly.Load("BLL.dll");
Type type = ass.GetType("BLL.UserBLL");
//调用默认的无参构造函数进行对象的创建
object myUserBll = Activator.CreateInstance(type);
IUserBLL userBll = myUserBll as IUserBLL;
var result = userBll.GetUserInfor();
return result;
} /// <summary>
/// 测试AUTOFAC
/// </summary>
/// <returns></returns>
[HttpGet, Route("testAutofac")]
public string Test()
{
//IUserBLL userBLL = System.Web.Mvc.DependencyResolver.Current.GetService<IUserBLL>();
var builder = new ContainerBuilder();
builder.RegisterType<UserBLL>().As<IUserBLL>();
var container = builder.Build().BeginLifetimeScope();
var userBll = container.Resolve<IUserBLL>();
var result = userBll.GetUserInfor("Autofac");
return result;
//var result = _userBLL.GetUserInfor("Autofac");
//return result;
} /// <summary>
///
/// </summary>
/// <returns></returns>
[HttpGet, Route("Assembly")]
public string GetUserInfo()
{
//1、使用nupkg引用Autofac,Autofac.Mvc5和Autofac.Webapi2
//PM > install-package autofac - version 3.5.0
//PM > install-package autofac.mvc5
//PM > install-package autofac.webapi2
//(注意:您的项目中如果使用的是webapi2,此处必须为webapi2而不是webapi,
//否则在运行时将出现“重写成员“Autofac.Integration.WebApi.AutofacWebApiDependencyResolver.BeginScope()”时违反了继承安全性规则。
//重写方法的安全可访问性必须与所重写方法的安全可访问性匹配。”错误。) mvc同样
string strUserInfo = _userBll.GetUserInfor("user-Assembly");
string strPeople = _peopleBll.Introduce("people-Assembly");
string result = strUserInfo + "," + strPeople;
return result;
} // GET api/<controller>
public IEnumerable<string> Get()
{
return new string[] { "value1", "value2" };
} // GET api/<controller>/5
public string Get(int id)
{
return "value";
} // POST api/<controller>
public void Post([FromBody]string value)
{
} // PUT api/<controller>/5
public void Put(int id, [FromBody]string value)
{
} // DELETE api/<controller>/5
public void Delete(int id)
{
}
}
}

UserController

netcore;

 //DI了AutoMapper中需要用到的服务,其中包括AutoMapper的配置类 Profile
services.AddAutoMapper();
var builder = new ContainerBuilder();
builder.Populate(services);
builder.RegisterAssemblyTypes(typeof(ManagerRoleRepository).Assembly)
.Where(t => t.Name.EndsWith("Repository"))
.AsImplementedInterfaces();
builder.RegisterAssemblyTypes(typeof(ManagerRoleService).Assembly)
.Where(t => t.Name.EndsWith("Service"))
.AsImplementedInterfaces();
return new AutofacServiceProvider(builder.Build());
}

netcore 配置

public IServiceProvider ConfigureServices(IServiceCollection services)
        { 
            services.AddMvc();
            var builder = new ContainerBuilder();//实例化 AutoFac  容器   
              
            var assemblys = Assembly.Load("Service");//Service是继承接口的实现方法类库名称
            var baseType = typeof(IDependency);//IDependency 是一个接口(所有要实现依赖注入的借口都要继承该接口)
            builder.RegisterAssemblyTypes(assemblys)
             .Where(m => baseType.IsAssignableFrom(m) && m != baseType)
             .AsImplementedInterfaces().InstancePerLifetimeScope();             builder.Populate(services);
            ApplicationContainer = builder.Build();
            return new AutofacServiceProvider(ApplicationContainer);//第三方IOC接管 core内置DI容器         } ConfigureServices方法由void改为返回IServiceProvider

https://www.cnblogs.com/shacoli/p/8523866.html

https://www.cnblogs.com/xujie520/p/5200815.html

https://www.cnblogs.com/yanweidie/p/autofac.html

https://www.cnblogs.com/lenmom/p/9081658.html

https://blog.csdn.net/ad996454914/article/details/80901105

https://www.cnblogs.com/yanweidie/p/autofac.html

Autofac +webapi 配置的更多相关文章

  1. Autofac 及 Autofac.WebApi 与MVC版本兼容问题

    环境:vs2013 下载 Autofac 时,会自动把 Microsoft.AspNet.Mvc 更新到 5.2.3.原来是 5.0.0.0 再使用 Autofac.WebApi , 出现以下问题: ...

  2. Asp.Net WebAPI配置接口返回数据类型为Json格式

    Asp.Net WebAPI配置接口返回数据类型为Json格式   一.默认情况下WebApi 对于没有指定请求数据类型类型的请求,返回数据类型为Xml格式 例如:从浏览器直接输入地址,或者默认的XM ...

  3. .net core webapi 配置swagger调试界面

    一.创建一个.net core webapi的项目: 二.在nuget程序包管理器控制台输入  Install-Package Swashbuckle -version 6.0.0-beta902   ...

  4. Asp.net WebApi 配置 Swagger UI

    首先安装Swashbuckle.Core 然后添加swagger配置文件. [assembly: PreApplicationStartMethod(typeof(SwaggerConfig), &q ...

  5. Autofac通过配置的方式

    autofac是比较简单易用的IOC容器.下面我们展示如何通过json配置文件,来进行控制反转. 需要用到以下程序集.可以通过nugget分别安装 Microsoft.Extensions.Confi ...

  6. Asp.net Mvc、webApi配置允许跨域

    Web.config 下<system.webServer> 节点下配置 <httpProtocol> <customHeaders> <add name=& ...

  7. C# WebApi 配置复杂路由不生效的问题

    配置复杂路由不生效是由于优先级的关系,应该把默认路由放在最后. config.Routes.MapHttpRoute( name: "DynamicApi", routeTempl ...

  8. asp.net core webapi 配置跨域处理

    在Startup.cs文件中的ConfigureServices方法中加入如下代码: //配置跨域处理 services.AddCors(options => { options.AddPoli ...

  9. webapi框架搭建-依赖注入之autofac

    前言 c#的依赖注入框架有unity.autofac,两个博主都用过,感觉unity比较简单而autofac的功能相对更丰富(自然也更复杂一点),本篇将基于前几篇已经创建好的webapi项目,引入au ...

随机推荐

  1. IIS7 配置ssl证书 多域名绑定443端口

    IIS7下多个子域名同时配置https协议,但IIS7默认支持单个443端口造成端口冲突: 解决方案:先把每个域名配置不同的端口 例:444,445,446等 然后在:C:\Windows\syste ...

  2. Metabase 从 H2 迁移到 MySQL 踩坑指南

    写在前面的话 首先如果你看到了这篇文章,可能你就已经指定 Metabase 是啥了,我这里还是简单的做个说明: Metabase is the easy, open source way for ev ...

  3. cmd应用

    如何用cmd命令新建和打开一个隐藏文件夹 随着电脑的广泛应用,个人电脑的私人空间越来越大,很多人喜欢把个人的一些私隐的文件存放在电脑上,私隐文件当然是不想别人看到的,为了防止别人看不见自己的文件,可以 ...

  4. java 程序设计第一次作业

    public class Join{ public static void main(String args[]){ String s1=new String("hello"); ...

  5. Access MongoDB Data with Entity Framework 6

    This article shows how to access MongoDB data using an Entity Framework code-first approach. Entity ...

  6. PyQt5(1)——Qt Designer初探

    相关环境配置我们就不介绍了(网上有很多教程) Qt Designer 是一款十分强大的GUI工具,生成的文件为 .UI文件  可以通过命令转化为Py文件,简单来说我们可以通过拖拽方式生成界面,在通过简 ...

  7. 两种 js下载文件的步骤

    ----------------------------------引用地址链接------------------------------------------------- http://www ...

  8. vue中vueRouter使用

    首先需要安装依赖:

  9. logback 发送邮件的类.

    类名 : SMTPAppenderBase方法名: sendBuffer

  10. 【实战分享】安卓app测试的一些记录

    一.app代码未混淆1.使用7zip解压apk文件2.执行命令:dex2jar.bat apk解压后文件夹中的classes.dex文件3.上述命令执行后会在apk文件夹中生成java源码文件clas ...