LightInject:调用 HttpPost 方法
Posted
技术标签:
【中文标题】LightInject:调用 HttpPost 方法【英文标题】:LightInject: Call HttpPost Method 【发布时间】:2021-12-16 17:51:13 【问题描述】:我有这个带有 HTTPPost 方法的类:
公共类 MyController : ControllerBase 私有只读 ILog _logger;
public MyController(ILog logger)
this._logger = logger;
[Route("api/route/Id/Start")]
[HttpPost]
public async Task<IActionResult> Start(string Id)
...
在 BootStrap 类中,我想调用 Start 方法。我该怎么做?:
IServiceContainer _serviceContainer;
public MyBootstrapper(IServiceContainer container)
container.RegisterConstructorDependency<ILog>((factory, info) => new InfoLogger(info.Member.DeclaringType));
public async Task RunAsync()
await RegisterServicesAsync();
protected static async Task RegisterServicesAsync()
IServiceContainer container = new ServiceContainer();
container.Register<MyController>();
using (container.BeginScope())
//I must call here?
我想做的是从控制台应用程序调用 My Method:
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
Bootstrapper.RunAsync().Wait();
在 Bootrapper 中调用我在不同服务中的方法。
【问题讨论】:
这似乎几乎肯定是错误的方式去做任何你想做的事情。你能澄清一下实际目标是什么吗? 你在这里的意图是什么?在 .net 核心中,您通常在 StartUp 类中注册所有内容。在您的 Startup 类中,您可以调用 Bootstrap 类。您可以尝试将(此 IServiceContainer 容器)添加到您的方法签名中,以便您可以从启动类中调用它。 我想通过我的 Web API 进行测试。 啊好吧。尝试使用起订量。这是一种为单元测试伪造注入的绝妙方法。对于集成测试,请看这里...docs.microsoft.com/en-us/aspnet/core/test/… 【参考方案1】:您的方法似乎有误。
在你的启动类位置这个部分
public void ConfigureServices(IServiceCollection services)
// existing code
// add this
BootStrap.RegisterServices();
在您的 BootStrap 文件中执行类似的操作(更新您的代码)。我会建议删除重置
public void RegisterServices(this IServiceCollection collection)
// or whatever required scope. AddSingleton, AddTransient, AddScoped
collection.AddTransient<ISomeInterface, SomeImplementationOfISomeInterface>();
///...add more as needed
这是一个很好的起点 Microsoft DI Documentation
【讨论】:
以上是关于LightInject:调用 HttpPost 方法的主要内容,如果未能解决你的问题,请参考以下文章
使用带有 DTO 的 HttpPost,邮递员无法调用 tht 方法
C# 使用 HttpPost 请求调用 WebService (转)
为啥在我的 HttpPost 方法 Ajax 调用中,控制器上的参数为空?