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 (转)

将 Json 复杂对象传递给 HttpPost 调用

为啥在我的 HttpPost 方法 Ajax 调用中,控制器上的参数为空?

使用按钮从视图内部调用 httppost actionresult

ASP.NET JQuery,禁用表单提交按钮不调用 httpPost 操作