C#将对象传递给Owin主机中的ApiController

时间:2018-10-15 10:08:02

标签: c# owin

我有一个Windows服务,可以在计时器刻度上执行一些操作。现在,我需要向该服务添加API终结点,以执行几乎相同的工作,但按需进行。在我的服务中,我有两个帮助器类的实例:

LithiumUtility lu;
MarketoUtility mu;

要托管我的终结点,我使用Microsoft.AspNet.WebApi.OwinSelfHost程序包。在所有教程中,我都以IDisposable _server = WebApp.Start<Startup>(url: baseAddress);开始。启动类也没什么特别的。

我的端点在以下类中定义:

public class MarketoController : ApiController{}

因此,有一种方法可以将我的mulu传递给MarketoController。我认为应该通过构造函数来完成,但是MarketoController并没有在任何地方被明确引用,而且我不确定它是如何创建的。

2 个答案:

答案 0 :(得分:0)

这是通过asp.net dependency injection

实现的

摘要:在services.AddScoped<LithiumUtility>中调用Startup.ConfigureServices连接asp.net管道以了解如何创建构造函数依赖项的实例,因此您正确地认为控制器的构造函数是指定这些依赖项的正确位置依赖项。

答案 1 :(得分:0)

经过大量搜索,我找不到关于“如何使用某个类的具体实例”的答案。至少无需安装10个其他软件包并编写100行代码。

所以我采用了这种肮脏的方法:

我创建了此类:

   struct UtilityClasses
{
    public class1 c1 { get; set; }
    public class2 c2 { get; set; }

    public static UtilityClasses uc { get; set; }
    public UtilityClasses(class1 c1, class2 c2)
    {
        this.c1 = c1;
        this.c2 = c2;
    }
}

我在启动服务器IDisposable _server = WebApp.Start<Startup>(url: baseAddress)的行附近

        UtilityClasses uc = new UtilityClasses(c1, c2);
        UtilityClasses.uc = uc;

然后从我的控制器打给我

    private class1 c1;
    private class2 c2;


    public MarketoController()
    {
        c1 = UtilityClasses.uc.c1;
        c2 = UtilityClasses.uc.c2;
    }

根据我所读的所有内容,这不是一个好主意,但可以解决我的问题。