asp.net core 7+ 调用类库的控制器

直入主题 ,用原版ioc的话只需要现在类库中引用包

 然后就和普通控制器一样,继承ControllerBase,然后标记上特性就可以使用

 

如果是使用autofac作为ioc,那么就要稍微改一下

builder.Host.UseServiceProviderFactory(new AutofacServiceProviderFactory());

使用autofac代替默认的ioc容器

    builder.Host.ConfigureContainer<ContainerBuilder>(x =>
    {
        x.RegisterType<Data>().As<IData>().PropertiesAutowired();//正常注入代码       
    });

如果使用构造函数注入的话,那么就搞定了

如果你要是用属性注入,代码还需要修改一下

复制代码
 builder.Host.ConfigureContainer<ContainerBuilder>(x =>
 {
     x.RegisterType<Data>().As<IData>().PropertiesAutowired();//正常注入代码

     var controllersTypesInAssembly = typeof(WebAp.Program).Assembly.GetExportedTypes()
     .Where(type => typeof(ControllerBase).IsAssignableFrom(type)).ToArray();

     var controllersTypesInAssembly2 = typeof(APiClassLibrary.CAController).Assembly.GetExportedTypes()
     .Where(type => typeof(ControllerBase).IsAssignableFrom(type)).ToArray();

     x.RegisterTypes(controllersTypesInAssembly).PropertiesAutowired();
     x.RegisterTypes(controllersTypesInAssembly2).PropertiesAutowired();
 });
复制代码

我这里项目分为

 WebAp和APiClassLibrary里面都有控制器,因此需要分别获取他们的程序集,然后筛选里面继承了ControllerBase的类,最后在注册在ioc里面.

获取程序集也可以通过这种方式.

 Assembly.Load("*.*.*").GetExportedTypes().Where(type => typeof(ControllerBase).IsAssignableFrom(type)).ToArray();

 

最后需要流式调用方法 AddControllersAsServices()把控制器作为类通过ioc注册

 builder.Services.AddControllers()
     .AddControllersAsServices();

网上有些代码写得是这段代码

 builder.Services.Replace(ServiceDescriptor.Transient<IControllerActivator, ServiceBasedControllerActivator>());

可以直接使用上面的 .AddControllersAsServices() 这个的源码里包括了上面的代码

 做完这些 就可以愉快的使用autofac属性注入,并且控制器和项目分离了

 

posted @   大大只植物  阅读(64)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Ollama——大语言模型本地部署的极速利器
· 使用C#创建一个MCP客户端
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· Windows编程----内核对象竟然如此简单?
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
点击右上角即可分享
微信分享提示