C# 在azure应用程序服务的另一个控制器中实例化控制器

C# 在azure应用程序服务的另一个控制器中实例化控制器,c#,asp.net,azure,C#,Asp.net,Azure,对于Azure应用程序服务的一个简单todo示例,我有一个ToDouseController,它是TableController,还有一个FacebookController,它是ApiController 在FacebookController中,我想获取TodoUserController TodoUserController 在实例化TodoUsersController 如何获取ToDouseController中的用户?如果您仍然需要解决此问题,正如其他人所评论的,您用于检索todo列

对于Azure应用程序服务的一个简单todo示例,我有一个
ToDouseController
,它是
TableController
,还有一个
FacebookController
,它是
ApiController

FacebookController
中,我想获取
TodoUserController

TodoUserController

在实例化
TodoUsersController


如何获取ToDouseController中的用户?

如果您仍然需要解决此问题,正如其他人所评论的,您用于检索todo列表的共享代码应该移到其他位置。通常,您的ToDouseController和FacebookController都可以调用该服务以获取所需的数据:

public class TodoUserService {
    public IEnumerable<TodoUser> GetAllTodoUsers() {
        Console.WriteLine ("Getting todos...");
        // ...
    }
}

public class TodoUserController : TableController<TodoUser> {
    public IEnumerable<TodoUser> GetAllTodoUsers() {
        TodoUserService todoUserService = new TodoUserService();
        return todoUserService.GetAllTodoUsers();
    }
}


public class FacebookController : ApiController {
    public FacebookStuff GetFacebookStuff() {
        TodoUserService todoUserService = new TodoUserService();
        var users = todoUserService.GetAllTodoUsers();
        // ... other Facebook stuff     
    }
}
公共类TodoUserService{
公共IEnumerable GetAllTodoUsers(){
Console.WriteLine(“获取待办事项…”);
// ...
}
}
公共类ToDouseController:TableController{
公共IEnumerable GetAllTodoUsers(){
TodoUserService TodoUserService=新TodoUserService();
返回todoUserService.GetAllTodoUsers();
}
}
公共类FacebookController:ApicController{
公共FacebookStuff GetFacebookStuff(){
TodoUserService TodoUserService=新TodoUserService();
var users=todoUserService.GetAllTodoUsers();
//…其他Facebook的东西
}
}
这实现了我假设您想要做的事情——通过不在两个地方重复逻辑来保持代码的干爽,并且保持关注点分离(SoC)。正如mason提到的,理想情况下,控制器应该包含最少的代码,并且主要处理与客户机之间的请求


希望这能有所帮助。

不要这样做。将重要的逻辑移到第三个位置,不要创建不需要的控制器。当我使用
var response=wait client.GetAsync(“path/TodoUser”);时,仍然会得到
NullException
TodoUserService
中的
DbContext
,在
MyDbContext ctx=new MyDbContext()
之后尝试使用
ctx
时,我仍然会得到
NullReferenceException
,调用
Wait client.GetAsync()时是否会出现异常(“路径/TodoUser”)
?如果是这样,可能是您的映射不正确。在您提供服务之前,您或者您是否能够自己从
TodouseController
获取任何数据?我没有单独尝试使用
TodouseController
。让我在那里放置一些虚拟数据并尝试一下。当我调用
Wait cl时,总是会出现异常ientGetAsync(“任意路径”)
public class FacebookController : ApiController{
    ....
    TodoUserController ctrl = new TodoUserController();
    var users = ctrl.GetAllTodoUsers();
    ....
}
public class TodoUserService {
    public IEnumerable<TodoUser> GetAllTodoUsers() {
        Console.WriteLine ("Getting todos...");
        // ...
    }
}

public class TodoUserController : TableController<TodoUser> {
    public IEnumerable<TodoUser> GetAllTodoUsers() {
        TodoUserService todoUserService = new TodoUserService();
        return todoUserService.GetAllTodoUsers();
    }
}


public class FacebookController : ApiController {
    public FacebookStuff GetFacebookStuff() {
        TodoUserService todoUserService = new TodoUserService();
        var users = todoUserService.GetAllTodoUsers();
        // ... other Facebook stuff     
    }
}