C# 从控制器调用类方法

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 :

我正在尝试将webapi(owin.selfhosting)支持添加到现有的C#console应用程序中,我遇到了来自控制器的回调问题。本质上,我需要调用一个函数作为对http请求的反应。我认为代表/活动是可能的,但迄今为止没有成功

更新: 使用静态事件似乎有效,我使用了本视频()中描述的标准模式,并在事件声明之前添加了一个静态关键字。但将静态委托与非静态订阅服务器混合可能不是最佳实践

代码示例:

//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