2017-05-27 80 views
0

对于Azure应用服务的简单待办事例,我有一个TodoUserController这是一个TableController和一个FacebookController这是一个ApiController在Azure应用服务的另一个控制器中实例化控制器

FacebookController,我想获得用户的列表中TodoUserController

TodoUserController

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

FacebookController

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

我在实例得到

我如何在TodoUserController用户?

+1

只是不这样做。把重要的逻辑移到第三个位置,不要创建一个你不需要的控制器。当我使用'VAR响应=等待client.GetAsync(“路径/ TodoUser”) – DavidG

+0

我仍然得到'NullException';' –

+0

你看过大卫对此有何评论?让我重复一遍:*不要这样做*。将逻辑移到另一个位置,然后在那里调用逻辑。控制器应该是客户端浏览器和后端之间的接口,它们不适用于后端到后端的调用。 – mason

回答

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)。作为泥水匠提到控制器应该理想地包含最少的代码并主要处理来自和来自客户端的请求。

希望有所帮助。

+0

我尝试在'TodoUserService'与'DbContext'工作,我仍然得到'NullReferenceException'试图MyDbContext CTX =新MyDbContext()后'使用'ctx'当' –

+0

您是否获得了异常,当你调用'等待客户端.GetAsync(“path/TodoUser”)'?如果是这样,那可能是你的映射不正确。在你提供服务之前,你或者是否可以自己从'TodoUserController'获取任何数据? –

+0

分享更多你的代码可以帮助 –

相关问题