在azure app服务中的另一个控制器中实例化控制器

时间:2017-05-27 15:30:13

标签: c# asp.net azure

对于Azure App Service的简单todo示例,我的TodoUserControllerTableControllerFacebookControllerApiController

FacebookController中,我想获取TodoUserController

中的用户列表

TodoUserController

 public class TodoUserController : TableController<TodoUser>{...}

FacebookController

public class FacebookController : ApiController{
    ....
    TodoUserController ctrl = new TodoUserController();
    var users = ctrl.GetAllTodoUsers();
    ....
}

我在实例化NullException

时得到TodoUsersController

如何让用户TodoUserController

1 个答案:

答案 0 :(得分:0)

如果您仍需要解决此问题,正如其他人所评论的那样,您检索待办事项列表的共享代码应移至其他位置。通常在服务中,您的TodoUserController和您的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     
    }
}

这实现了我认为你想要做的事情 - 通过不重复两个地方的逻辑来保持代码DRY,并且还保持关注点分离(SoC)。正如mason提到的控制器理想情况下应包含最少的代码,主要处理来自客户端的请求。

希望有所帮助。