Autofac与WebApi集成

2023-11-12

目录

 

Autofac原理

如何将Autofac与Web API集成?

Autofac功能详解

1.HttpConfiguration

2.控制器

3.解析器

4.过滤器

1.注册过滤器提供程序

2.实现过滤器接口

3.注册过滤器

4.过滤器覆盖

5为什么我们使用非标准的过滤器接口

6.标准Web API筛选器属性是单例

7实例过滤器不会被注入

5.模型绑定器

1.注册绑定器提供程序

2注册模型绑定器

3使用ModelBinderAttribute标记参数


Autofac原理

寻找到相关实例,将其赋给接口对象。比如说,我们在调用方使用了一堆接口,然后引用了一个DLL,这个DLL包含了实现这些接口的实例,那么Autofac就自动从这个DLL中提取出这些实例,赋给接口对象。这一切都是Autofac自动完成的。

如何将Autofac与Web API集成?

1需要引用Web API集成NuGet包

2修改Global.axax文件

  1. 注册您的控制器并设置依赖关系解析器。
  2. 也可以选择启用其他功能。

 

如下:

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托管,HttpConfigurationGlobalConfiguration.Configuration

  1. var builder = new ContainerBuilder();  
  2. var config = GlobalConfiguration.Configuration;  
  3. builder.RegisterApiControllers(Assembly.GetExecutingAssembly());  
  4. var container = builder.Build();  
  5. config.DependencyResolver = new AutofacWebApiDependencyResolver(container);  

 

2.对于自托管,HttpConfiguration是您的HttpSelfHostConfiguration实例

  1. var builder = new ContainerBuilder();  
  2. var config = new HttpSelfHostConfiguration("http://localhost:8080");  
  3. builder.RegisterApiControllers(Assembly.GetExecutingAssembly());  
  4. var container = builder.Build();  
  5. config.DependencyResolver = new AutofacWebApiDependencyResolver(container);  

 

对于OWIN集成,HttpConfiguration是您在应用程序启动类中创建并传递给Web API中间件的一个。

  1. var builder = new ContainerBuilder();  
  2. var config = new HttpConfiguration();  
  3. builder.RegisterApiControllers(Assembly.GetExecutingAssembly());  
  4. var container = builder.Build();  
  5. config.DependencyResolver = new AutofacWebApiDependencyResolver(container);  

 

 

2.控制器

在应用程序启动时,在构建Autofac容器的同时,您应该注册您的Web API控制器及其依赖项。 这通常发生在OWIN启动类或Global.asaxApplication_Start方法中。

默认情况下,实现IHttpController的类型和具有后缀Controller的名称将被注册。

  1. var builder = new ContainerBuilder();  
  2.   
  3. //.您可以使用程序集扫描一次注册控制器...  
  4. builder.RegisterApiControllers(Assembly.GetExecutingAssembly());  
  5.   
  6. // ...或者您可以手动注册个人控制器  
  7. builder.RegisterType<ValuesController>().InstancePerRequest();  

如果您的控制器不遵循标准命名约定,则可以选择使用RegisterApiControllers方法的重载提供自定义后缀。

 

  1. //您还可以使用程序集扫描以自定义后缀注册控制器  
  2. builder.RegisterApiControllers("MyCustomSuffix", Assembly.GetExecutingAssembly());  

 

 

3.解析器

在构建你的容器之后,将它传递给AutofacWebApiDependencyResolver类的新实例。 将新的解析器附加到您的HttpConfiguration.DependencyResolver,让Web API知道它应该使用AutofacWebApiDependencyResolver找到服务。 这是Autofac的IDependencyResolver接口的实现。

  1. var container = builder.Build();  
  2. config.DependencyResolver = new AutofacWebApiDependencyResolver(container);  

 

 

 

4.过滤器

 

因为属性是通过反射API创建的,所以你不能自己调用构造函数。 除了属性注入特性之外,没有别的选择。 与Web API的Autofac集成提供了一种机制,允许您创建实现过滤器接口(IAutofacActionFilterIAutofacAuthorizationFilterIAutofacExceptionFilter)的类,并使用容器构建器上的注册语法将它们连接到所需的控制器或操作方法。

1.注册过滤器提供程序

您需要注册Autofac筛选器提供程序实现,因为它可以根据注册完成筛选器的配置工作。 这是通过调用容器生成器上的RegisterWebApiFilterProvider方法并提供一个HttpConfiguration实例来完成的。

  1. var builder = new ContainerBuilder();  
  2. builder.RegisterWebApiFilterProvider(config);  

2.实现过滤器接口

而不是从现有的Web API过滤器属性派生出来,而是实现在集成中定义的适当的过滤器接口。 下面的过滤器是一个动作过滤器,并实现IAutofacActionFilter而不是System.Web.Http.Filters.IActionFilter

 

  1. public class LoggingActionFilter : IAutofacActionFilter  
  2. {  
  3.   readonly ILogger _logger;  
  4.   
  5.   public LoggingActionFilter(ILogger logger)  
  6.   {  
  7.     _logger = logger;  
  8.   }  
  9.   
  10.   public Task OnActionExecutingAsync(HttpActionContext actionContext, CancellationToken cancellationToken)  
  11.   {  
  12.     _logger.Write(actionContext.ActionDescriptor.ActionName);  
  13.     return Task.FromResult(0);  
  14.   }  
  15.   
  16.   public Task OnActionExecutedAsync(HttpActionExecutedContext actionExecutedContext, CancellationToken cancellationToken)  
  17.   {  
  18.     _logger.Write(actionExecutedContext.ActionContext.ActionDescriptor.ActionName);  
  19.     return Task.FromResult(0);  
  20.   }  
  21. }  

请注意,示例中没有运行实际的异步代码,因此它将返回Task.FromResult(0),这是返回“空任务”的常用方法。如果您的过滤器确实需要异步代码,则可以返回一个真实的Task对象或 像任何其他异步方法一样使用async/await代码。

3.注册过滤器

为了执行过滤器,您需要将其注册到容器中,并通知哪个控制器以及可选的操作应该成为目标。 这是使用以下ContainerBuilder扩展方法完成的:

  1. AsWebApiActionFilterFor<TController>()  
  2. AsWebApiActionFilterOverrideFor<TController>()  
  3. AsWebApiAuthorizationFilterFor<TController>()  
  4. AsWebApiAuthorizationOverrideFilterFor<TController>()  
  5. AsWebApiAuthenticationFilterFor<TController>()  
  6. AsWebApiAuthenticationOverrideFilterFor<TController>()  
  7. AsWebApiExceptionFilterFor<TController>()  
  8. AsWebApiExceptionOverrideFilterFor<TController>()  

 

这些方法需要控制器类型的泛型类型参数,以及一个可选的lambda表达式,用于指示过滤器应用于控制器上的特定方法。 如果不提供lambda表达式,则过滤器将应用于控制器上的所有操作方法,方法与在控制器级别放置基于属性的过滤器相同。

您可以根据需要应用尽可能多的过滤器。 注册一种类型的过滤器不会删除或替换以前注册的过滤器。

在下面的示例中,过滤器正在应用于ValuesController上的Get操作方法。

  1. var builder = new ContainerBuilder();  
  2.   
  3. builder.Register(c => new LoggingActionFilter(c.Resolve<ILogger>()))  
  4.     .AsWebApiActionFilterFor<ValuesController>(c => c.Get(default(int)))  
  5.     .InstancePerRequest();  

 

将过滤器应用于需要参数的操作方法时,请在您的lambda表达式中使用参数的数据类型为default的关键字作为占位符。例如,上面例子中的Get操作方法需要一个int参数,并使用default(int)作为lambda表达式中的强类型占位符。

也可以在通用类型参数中提供基本控制器类型,以将过滤器应用于所有派生控制器。此外,还可以使您的操作方法的lambda表达式针对基本控制器类型上的方法,并将其应用于所有派生控制器上的该方法。

 

4.过滤器覆盖

在注册过滤器时,有像AsWebApiActionFilterFor<TController>()这样的基本注册方法,并覆盖像AsWebApiActionFilterOverrideFor<TController>()这样的注册方法。重写方法的要点是提供一种方法来确保首先执行某些过滤器。您可以根据需要进行多次覆盖 - 这些不是替换筛选器,只是首先运行的筛选器。

过滤器将按以下顺序运行:

  1. Controller-scoped overrides  
  2. Action-scoped overrides  
  3. Controller scoped filters  
  4. Action scoped filters  

5为什么我们使用非标准的过滤器接口

如果您想知道为什么要引入特殊的接口,那么在Web API中查看IActionFilter接口的签名时,这应该会变得更加明显。

  1. public interface IActionFilter : IFilter  
  2. {  
  3.   Task<HttpResponseMessage> ExecuteActionFilterAsync(HttpActionContext actionContext, CancellationToken cancellationToken, Func<Task<HttpResponseMessage>> continuation);  
  4. }  

现在将其与您需要实现的Autofac接口进行比较

  1. public interface IAutofacActionFilter  
  2. {  
  3.   Task OnActionExecutedAsync(HttpActionExecutedContext actionExecutedContext, CancellationToken cancellationToken);  
  4.   
  5.   Task OnActionExecutingAsync(HttpActionContext actionContext, CancellationToken cancellationToken);  
  6. }  

 

问题是OnActionExecutingAsyncOnActionExecutedAsync方法实际上是在ActionFilterAttribute而不是在IActionFilter接口上定义的。 在Web API中广泛使用System.Threading.Tasks命名空间意味着链接返回任务以及属性中的相应错误处理实际上需要大量代码(ActionFilterAttribute包含近100行代码)。 这绝对不是你想要处理自己的事情。

Autofac引入了新的接口,使您能够专注于实现过滤器的代码,而不是所有的管道。 在内部,它创建实际的Web API属性的自定义实例,从容器中解析过滤器实现,并在适当的时候执行它们。

创建内部属性包装的另一个原因是支持过滤器的InstancePerRequest生存期范围。 

6.标准Web API筛选器属性是单例

您可能会注意到,如果您使用标准Web API筛选器,则无法使用InstancePerRequest依赖项。

与MVC中的过滤器提供程序不同,Web API中的过滤器提供程序不允许指定不应该的缓存过滤器实例。这意味着Web API中的所有过滤器属性都是单一实例,它们在应用程序的整个生命周期中都存在

如果您试图在过滤器中获取每个请求的依赖关系,那么只有在使用Autofac过滤器接口的情况下才能使用。使用标准的Web API过滤器,依赖关系将被注入一次 - 第一次解析过滤器 - 而不再解析一次。

如果您无法使用Autofac接口,并且您的过滤器中需要每个请求或每个依赖于实例的服务,则必须使用服务位置。幸运的是,Web API使获取当前的请求范围变得非常简单 - 它和HttpRequestMessage一起。

以下是使用Web API IDependencyScope的服务位置来获取每个请求相关性的过滤器示例:

  1. public interface ServiceCallActionFilterAttribute : ActionFilterAttribute  
  2. {  
  3.   public override void OnActionExecuting(HttpActionContext actionContext)  
  4.   {  
  5.     //获取请求生存期范围,以便解析服务  
  6.     var requestScope = actionContext.Request.GetDependencyScope();  
  7.   
  8.     //解析您想要使用的服务  
  9.     var service = requestScope.GetService(typeof(IMyService)) as IMyService;  
  10.   
  11.     //在过滤器中完成剩下的工作  
  12.     service.DoWork();  
  13.   }  
  14. }  

7实例过滤器不会被注入

设置过滤器时,可能需要手动将过滤器添加到集合中,如下所示:

config.Filters.Add(new MyActionFilter());  

Autofac不会注入以这种方式注册的过滤器的属性。 这与使用RegisterInstance将对象的预构造实例放入Autofac时有些类似 - Autofac不会注入或修改预构造的实例。 对于预先构建并添加到过滤器集合中的过滤器实例也是如此。 与属性过滤器一样(如上所述),您可以通过使用服务位置而不是属性注入来解决此问题。

5.模型绑定器

通过依赖注入提供模型绑定器

与Web API的Autofac集成提供了使用依赖注入来解析模型绑定器的能力,并将绑定器与使用fluent 接口的类型相关联。

1.注册绑定器提供程序

您需要注册Autofac模型绑定器提供程序,以便在需要时可以解析任何已注册的IModelBinder实现。 这是通过调用容器生成器上的
RegisterWebApiModelBinderProvider方法来完成的。

  1. var builder = new ContainerBuilder();  
  2. builder.RegisterWebApiModelBinderProvider();  

2注册模型绑定器

一旦你已经实现了System.Web.Http.ModelBinding.IModelBinder来处理绑定的问题,使用Autofac注册它,让Autofac知道哪些类型应该绑定使用该绑定器。

 

  1. builder  
  2.   .RegisterType<AutomobileBinder>()  
  3.   .AsModelBinderForTypes(typeof(CarModel), typeof(TruckModel));  

3使用ModelBinderAttribute标记参数

即使已经注册了模型绑定器,仍然需要使用[ModelBinder]属性标记参数,以便Web API知道使用模型绑定器而不是媒体类型格式化程序来绑定模型。 您不必再指定模型绑定器类型,但您必须使用该属性标记该参数。 Web API文档中也提到了这一点。

public HttpResponseMessage Post([ModelBinder] CarModel car) { ... }  

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Autofac与WebApi集成 的相关文章

  • 无法使用已与其底层 RCW 分离的 COM 对象。在 oledb 中

    我收到此错误 但我不知道我做错了什么 下面的代码在backrgroundworker中 将异常详细信息复制到剪贴板 System Runtime InteropServices InvalidComObjectException 未处理 通
  • 是否可以强制 XMLWriter 将元素写入单引号中?

    这是我的代码 var ptFirstName tboxFirstName Text writer WriteAttributeString first ptFirstName 请注意 即使我使用 ptFirstName 也会以双引号结束 p
  • 获取按下的按钮的返回值

    我有一个在特定事件中弹出的表单 它从数组中提取按钮并将标签值设置为特定值 因此 如果您要按下或单击此按钮 该函数应返回标签值 我怎样才能做到这一点 我如何知道点击了哪个按钮 此时代码返回 DialogResult 但我想从函数返回 Tag
  • 未解决的包含:“cocos2d.h” - Cocos2dx

    当我在 Eclipse 中导入 cocos2dx android 项目时 我的头文件上收到此警告 Unresolved inclusion cocos2d h 为什么是这样 它实际上困扰着我 该项目可以正确编译并运行 但我希望这种情况消失
  • 如何避免情绪低落?

    我有一个实现状态模式每个状态处理从事件队列获取的事件 根据State因此类有一个纯虚方法void handleEvent const Event 事件继承基础Event类 但每个事件都包含其可以是不同类型的数据 例如 int string
  • 使闭包捕获的变量变得易失性

    闭包捕获的变量如何与不同线程交互 在下面的示例代码中 我想将totalEvents 声明为易失性的 但C 不允许这样做 是的 我知道这是错误的代码 这只是一个例子 private void WaitFor10Events volatile
  • Newtonsoft JSON PreserveReferences处理自定义等于用法

    我目前在使用 Newtonsoft Json 时遇到一些问题 我想要的很简单 将要序列化的对象与所有属性和子属性进行比较以确保相等 我现在尝试创建自己的 EqualityComparer 但它仅与父对象的属性进行比较 另外 我尝试编写自己的
  • 在 Visual Studio 2008 上设置预调试事件

    我想在 Visual Studio 中开始调试程序之前运行一个任务 我每次调试程序时都需要运行此任务 因此构建后事件还不够好 我查看了设置的 调试 选项卡 但没有这样的选项 有什么办法可以做到这一点吗 你唯一可以尝试的 IMO 就是尝试Co
  • 如何将图像和 POST 数据上传到 Azure 移动服务 ApiController 终结点?

    我正在尝试上传图片and POST表单数据 尽管理想情况下我希望它是json 到我的端点Azure 移动服务应用 我有ApiController method HttpPost Route api upload databaseId sea
  • Json.NET - 反序列化接口属性引发错误“类型是接口或抽象类,无法实例化”

    我有一个类 其属性是接口 public class Foo public int Number get set public ISomething Thing get set 尝试反序列化Foo使用 Json NET 的类给我一条错误消息
  • Web API - 访问 DbContext 类中的 HttpContext

    在我的 C Web API 应用程序中 我添加了CreatedDate and CreatedBy所有表中的列 现在 每当在任何表中添加新记录时 我想填充这些列 为此目的我已经覆盖SaveChanges and SaveChangesAsy
  • 使用 System.Text.Json 即时格式化 JSON 流

    我有一个未缩进的 Json 字符串 例如 hash 123 id 456 我想缩进字符串并将其序列化为 JSON 文件 天真地 我可以使用缩进字符串Newtonsoft如下 using Newtonsoft Json Linq JToken
  • Github Action 在运行可执行文件时卡住

    我正在尝试设置运行google tests on a C repository using Github Actions正在运行的Windows Latest 构建过程完成 但是当运行测试时 它被卡住并且不执行从生成的可执行文件Visual
  • 如何将单个 char 转换为 int [重复]

    这个问题在这里已经有答案了 我有一串数字 例如 123456789 我需要提取它们中的每一个以在计算中使用它们 我当然可以通过索引访问每个字符 但是如何将其转换为 int 我研究过 atoi 但它需要一个字符串作为参数 因此 我必须将每个字
  • clang 实例化后静态成员初始化

    这样的代码可以用 GCC 编译 但 clang 3 5 失败 include
  • 实体框架 4 DB 优先依赖注入?

    我更喜欢创建自己的数据库 设置索引 唯一约束等 使用 edmx 实体框架设计器 从数据库生成域模型是轻而易举的事 现在我有兴趣使用依赖注入来设置一些存储库 我查看了 StackOverflow 上的一些文章和帖子 似乎重点关注代码优先方法
  • C++ 复制初始化和直接初始化,奇怪的情况

    在继续阅读本文之前 请阅读在 C 中 复制初始化和直接初始化之间有区别吗 https stackoverflow com questions 1051379 is there a difference in c between copy i
  • 如何使我的表单标题栏遵循 Windows 深色主题?

    我已经下载了Windows 10更新包括黑暗主题 文件资源管理器等都是深色主题 但是当我创建自己的 C 表单应用程序时 标题栏是亮白色的 如何使我自己的桌面应用程序遵循我在 Windows 中设置的深色主题 你需要调用DwmSetWindo
  • 需要哪个版本的 Visual C++ 运行时库?

    microsoft 的最新 vcredist 2010 版 是否包含以前的版本 2008 SP1 和 2005 SP1 还是我需要安装全部 3 个版本 谢谢 你需要所有这些
  • 恢复上传文件控制

    我确实阅读了以下帖子 C 暂停 恢复上传 https stackoverflow com questions 1048330 pause resume upload in c 使用 HTTP 恢复上传 https stackoverflow

随机推荐

  • Jetbrains Clion IDE破解

    Jetbrains 系列IDE IntelliJ IDEA 一套智慧型的Java整合开发工具 特别专注与强调程式师的开发撰写效率提升 PHPStorm PHP 集成开发工具 PyCharm 智能Python集成开发工具 RubyMine R
  • impala ERROR: TransmitData() to 10.19.231.254:27000 failed: Network error107

    ERROR TransmitData to 10 19 231 254 27000 failed Network error recv error from 0 0 0 0 0 传输端点尚未连接 error 107 同时查的该任务的sql语
  • UnicodeDecodeError: ‘utf-8‘ codec can‘t decode byte 0xbb in position 65: invalid start byte

    openCV系列文章目录 文章目录 openCV系列文章目录 前言 一 出现的问题 运行效果 前言 今天测试了一下使用openCV python中读取视频流 UnicodeDecodeError utf 8 codec can t deco
  • 四轴笔记----PSRAM存储器介绍

    一 什么是PSRAM存储器 PSRAM全称Pseudo static random access memory 指的是伪静态随机存储器 之所以叫伪静态是因为它具有类SRAM的接口协议 给出地址 读 写命令 就可以实现存取 不像DRAM需要m
  • 51单片机空气质量检测系统 甲醛DHT11温湿度烟雾光照报警器WIFI系统

    采用51单片机 ADC0832芯片 DHT11 按键 LCD12864液晶 蜂鸣器 wifi模块 稳压模块 光敏电阻 烟雾传感器 甲醛传感器设计而成 1 LCD12864液晶实时显示烟雾浓度 当前空气中的温度值 湿度值 光照度 甲醛浓度并且
  • pycharm:连接github

    一 github上创建账户 github是一个仓库 用于代码管理 我刚好想将代码放到仓库里面管理 因此 写了这篇博客 我想着 大体思路应该是 1 在github上面创建账号 2 在本地开启客户端 3 通过某种方式建立连接 4 pycharm
  • 纯css实现webpack的logo转动

    原效果 实现效果 源码
  • MobileNetV2

    MobileNetV2 MobileNetV2 Inverted Residuals and Linear Bottlenecks 摘要 在本文中 我们描述了一种新的移动架构MobileNetV2 它改进了移动模型在多个任务和基准以及不同模
  • NLP 利器 Gensim 库的使用之 Word2Vec 模型案例演示(基于 word2vec-google-news-300 预训练模型,附下载)

    Gensim 库的使用之 Word2Vec 模型案例演示 要见识一下 Word2Vec 模型可以做什么 那么最好的方法就是直接下载一个预训练模型 然后尝试用一下看看效果 我们在这里获取一个在 Google News 数据集上训练完成的 Wo
  • Linux配置网卡(virb0下线)

    1 网卡设置 1 1 桥接模式 1 1 1 编辑网卡 1 输入命令 vi etc sysconfig network scripts ifcfg eth0 2 进入编辑模式 按 i 键 3 编辑网卡配置 4 按esc键 回到命令模式 5 按
  • Windows安装多Java版本快速切换

    环境 Win10 JDK6 JDK8 安装JDK6 JDK8 点点点 修改环境变量 注意 修改系统环境变量 JAVA安装路径 JAVA HOME JAVA6 HOME 注意 如果你想切换 JDK 版本 就在此处设置即可 JAVA6 HOME
  • thttpd 运行环境

    1 基于thttpd的Web服务器的简单架设 1 0 为了给刚入门的自己少找麻烦 以下操作都是root用户 1 1 代码的编译安装 configure make and make install 注意可执行程序thttp在 usr loca
  • html获得焦点和失去焦点

  • 基于OpenCV3.0图像处理中常见的五个滤波函数

    初学OpenCV的开发者很容易被OpenCV中各种滤波方法所困扰 不知道到底该用哪里一个来做滤波 表面原因看起来是因为OpenCV中各种滤波方式实在是太多太杂 其背后原因是对各种滤波方法的应用场景认知出现了问题 所以这里小编从应用场景与项目
  • Vue毕业设计选题 游戏攻略资讯补丁售卖商城(含源码+论文)

    文章目录 1 项目简介 2 实现效果 2 1 界面展示 3 设计方案 3 1 概述 3 2 系统流程 3 3 系统结构设计 4 项目获取 1 项目简介 Hi 各位同学好呀 这里是M学姐 今天向大家分享一个今年 2022 最新完成的毕业设计项
  • 云中 GPU的AI训练,显卡分配

    AI 模型的训练 模型并行 就是把模型就行分层级 model model layer 0 model layer 1 model layer 2 model layer 3 比如 一个主机有4个CPU CPU0 CPU1 CPU2 CPU3
  • 超详细!百度富媒体检索比对系统的关键技术

    导读 百度富媒体检索比对系统是一套基于 Ann approximate nearest neighbor 检索和内容特征比对技术 旨在提供针对图像 音频 视频等多媒体资源的相似检索系统 包括离线训练 建库 在线特征提取 检索 目前百度富媒体
  • minikube 快速使用入门 - 启动 - 2

    快速使用 启动Minikube 执行命令 如下 minikube start 执行之后系统开始安装minikube 如图所示 上面显示正在下载安装包 进行安装 因为请求链接的是外网 应该会有点慢 可以使用如下命令 minikube exe
  • 三分钟学会国产低功耗华大单片机二(MDK中下载与仿真)

    一 准备工作 使用micro USB 将开发板与电脑相连 打开一个已经存在的工程 工程如何建立请参考 三分学会国产低功耗华大单片机一 MDK中新建工程 二 工程的编译 点击魔法棒图标如下图所示 点击Device在芯片型号选择框中选中所选单片
  • Autofac与WebApi集成

    目录 Autofac原理 如何将Autofac与Web API集成 Autofac功能详解 1 HttpConfiguration 2 控制器 3 解析器 4 过滤器 1 注册过滤器提供程序 2 实现过滤器接口 3 注册过滤器 4 过滤器覆