C# 从控制器调用类方法
我正在尝试将webapi(owin.selfhosting)支持添加到现有的C#console应用程序中,我遇到了来自控制器的回调问题。本质上,我需要调用一个函数作为对http请求的反应。我认为代表/活动是可能的,但迄今为止没有成功 更新: 使用静态事件似乎有效,我使用了本视频()中描述的标准模式,并在事件声明之前添加了一个静态关键字。但将静态委托与非静态订阅服务器混合可能不是最佳实践 代码示例:C# 从控制器调用类方法,c#,asp.net-web-api2,self-hosting,C#,Asp.net Web Api2,Self Hosting,我正在尝试将webapi(owin.selfhosting)支持添加到现有的C#console应用程序中,我遇到了来自控制器的回调问题。本质上,我需要调用一个函数作为对http请求的反应。我认为代表/活动是可能的,但迄今为止没有成功 更新: 使用静态事件似乎有效,我使用了本视频()中描述的标准模式,并在事件声明之前添加了一个静态关键字。但将静态委托与非静态订阅服务器混合可能不是最佳实践 代码示例: //appcontroller.cs public class AppController :
//appcontroller.cs
public class AppController : ApiController
{ public delegate void EventHandler(object source, EventArgs args);
public static event EventHandler EventRecived;
protected virtual void OnEventRecived(string arg)
{
if( EventRecived != null)
{
EventRecived(this, arg);
}
}
[Route("api/{arg}")]
public void GetFoo(string arg)
{
/*
*
*/
OnEventRecived();
}
}
//program.cs
class Program
{ static void Main(string[] args)
{ WebApp.Start<Startup>(url: baseAddress);
SomeClass obj = new SomeClass();
AppController.EventHandler+=obj.OnRecivedEvent;
while (true)
{ //do work
}
}
}
class SomeClass
{ public SomeClass() {}
public void OnRecivedEvent(object sender, EventArgs e)
{
Foo(e);
}
public void Foo(string arg)
{
//do something
Console.WriteLine("request of "+arg);
}
}
在DI容器中注册实例,并将其注入控制器的构造函数中。检查上面的注释,您可以将
SomeClass
的实例注入AppController
的构造函数中,以便控制器具有所需的引用(指向SomeClass
)。有很多关于这方面的文章/帖子。
Console output >>request of holy_grail