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