C# 将对象传递给 Owin 主机中的 ApiController
C# Pass objects to ApiController in Owin host
我有一个 Windows 服务,可以在计时器滴答时做一些事情。现在我需要向该服务添加一个 API 端点以执行几乎相同的操作,但按需进行。在我的服务中,我有两个助手实例 classes:
LithiumUtility lu;
MarketoUtility mu;
为了托管我的端点,我使用 Microsoft.AspNet.WebApi.OwinSelfHost 包。正如所有教程中所见,我以 IDisposable _server = WebApp.Start<Startup>(url: baseAddress);
开头。 Startup class 也没什么特别的。
我的端点定义如下class:
public class MarketoController : ApiController{}
所以,有没有办法将我的 mu
和 lu
传递给 MarketoController
。我认为它应该通过构造函数完成,但是 MarketoController
没有在任何地方明确引用,我什至不确定它是如何创建的。
这是使用asp.net dependency injection
实现的
总结:在 Startup.ConfigureServices
中调用 services.AddScoped<LithiumUtility>
连接 asp.net 管道以了解如何创建构造函数依赖项的实例,所以你是正确的,控制器的构造函数是正确的指定这些依赖项的地方。,
经过大量搜索,我无法在 "How can I use a concrete instance of some class" 上找到答案。至少不用安装 10 个额外的包和写 100 行代码。
所以我采用了这种肮脏的方法:
我创建了这个 class:
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;
}
据我所知,这不是一个好主意,但它解决了我的问题。
我有一个 Windows 服务,可以在计时器滴答时做一些事情。现在我需要向该服务添加一个 API 端点以执行几乎相同的操作,但按需进行。在我的服务中,我有两个助手实例 classes:
LithiumUtility lu;
MarketoUtility mu;
为了托管我的端点,我使用 Microsoft.AspNet.WebApi.OwinSelfHost 包。正如所有教程中所见,我以 IDisposable _server = WebApp.Start<Startup>(url: baseAddress);
开头。 Startup class 也没什么特别的。
我的端点定义如下class:
public class MarketoController : ApiController{}
所以,有没有办法将我的 mu
和 lu
传递给 MarketoController
。我认为它应该通过构造函数完成,但是 MarketoController
没有在任何地方明确引用,我什至不确定它是如何创建的。
这是使用asp.net dependency injection
实现的总结:在 Startup.ConfigureServices
中调用 services.AddScoped<LithiumUtility>
连接 asp.net 管道以了解如何创建构造函数依赖项的实例,所以你是正确的,控制器的构造函数是正确的指定这些依赖项的地方。,
经过大量搜索,我无法在 "How can I use a concrete instance of some class" 上找到答案。至少不用安装 10 个额外的包和写 100 行代码。
所以我采用了这种肮脏的方法:
我创建了这个 class:
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;
}
据我所知,这不是一个好主意,但它解决了我的问题。