目录
Autofac原理
寻找到相关实例,将其赋给接口对象。比如说,我们在调用方使用了一堆接口,然后引用了一个DLL,这个DLL包含了实现这些接口的实例,那么Autofac就自动从这个DLL中提取出这些实例,赋给接口对象。这一切都是Autofac自动完成的。
如何将Autofac与Web API集成?
1需要引用Web API集成NuGet包
2修改Global.axax文件
- 注册您的控制器并设置依赖关系解析器。
- 也可以选择启用其他功能。
如下:
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
GlobalConfiguration.Configure(WebApiConfig.Register);
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
//扫描特定名称的程序集并一次性注册控制器
var assemblies = BuildManager.GetReferencedAssemblies()
.Cast<Assembly>()
.Where(r => r.FullName.StartsWith("CsdnNet."))
.ToArray();
var builder = new ContainerBuilder();
//得到你的HttpConfiguration.
var config = GlobalConfiguration.Configuration;
builder.RegisterAssemblyModules(assemblies);
//注册您的Web API控制器.
builder.RegisterApiControllersAndInterface(assemblies);
builder.RegisterConsumes(assemblies);
builder.RegisterRemotingService(assemblies);
builder.RegisterCrossService(assemblies);
builder.RegisterDao(assemblies);
builder.RegisterHotelBaseAutofacFilter();
//可选:注册Autofac过滤器、筛选器提供程序.
builder.RegisterWebApiFilterProvider(config);
//可选:注册Autofac模型绑定器提供程序
builder.RegisterWebApiModelBinderProvider();
//将依赖关系解析器设置为Autofac。
var container = builder.Build();//容器
config.DependencyResolver = new AutofacWebApiDependencyResolver(container);//让Web API知道它应该使用AutofacWebApiDependencyResolver(解析器)找到服务
var csl = new AutofacServiceLocator(container);
ServiceLocator.SetLocatorProvider(() => csl);
}
其中,Autofac为我们提供了HttpConfiguration 、控制器、解析器、过滤器、模型绑定器…
Autofac功能详解
***以下内容摘自:https://blog.csdn.net/WuLex/article/details/78808541
1.HttpConfiguration
在Web API中,设置应用程序需要您更新HttpConfiguration
对象的属性并设置值。 根据您的应用程序托管方式,您获得此配置的方式可能有所不同。
1.对于标准的IIS托管,HttpConfiguration
是GlobalConfiguration.Configuration
。
- var builder = new ContainerBuilder();
- var config = GlobalConfiguration.Configuration;
- builder.RegisterApiControllers(Assembly.GetExecutingAssembly());
- var container = builder.Build();
- config.DependencyResolver = new AutofacWebApiDependencyResolver(container);
2.对于自托管,HttpConfiguration
是您的HttpSelfHostConfiguration
实例
- var builder = new ContainerBuilder();
- var config = new HttpSelfHostConfiguration("http://localhost:8080");
- builder.RegisterApiControllers(Assembly.GetExecutingAssembly());
- var container = builder.Build();
- config.DependencyResolver = new AutofacWebApiDependencyResolver(container);
对于OWIN集成,HttpConfiguration
是您在应用程序启动类中创建并传递给Web API中间件的一个。
- var builder = new ContainerBuilder();
- var config = new HttpConfiguration();
- builder.RegisterApiControllers(Assembly.GetExecutingAssembly());