你不應該像這樣連接控制器方法,更不用說控制器不應該直接執行數據訪問。我建議你將這個函數外化爲一個單獨的類/存儲庫,這可以被兩個控制器使用。
實施例:
public class MessagesRepository
{
public List<Message> GetMessagesById(string username)
{
return db.Messages.Where(p => p.user == username).ToList();
}
}
然後:
public class FooController: Controller
{
public ActionResult Index()
{
var db = new MessagesRepository()
ViewBag.messages = db.GetMessagesById(Membership.GetUser().ProviderUserKey.ToString());
return View();
}
}
public class BarController: Controller
{
public ActionResult Index()
{
var db = new MessagesRepository()
ViewBag.messages = db.GetMessagesById(Membership.GetUser().ProviderUserKey.ToString());
return View();
}
}
行,這是第一個步驟。
public interface IMessagesRepository
{
List<Message> GetMessagesById(string username);
}
public class MessagesRepository: IMessagesRepository
{
public List<Message> GetMessagesById(string username)
{
return db.Messages.Where(p => p.user == username).ToList();
}
}
那麼你可以使用構造器注入那些控制器:
public class FooController: Controller
{
private readonly IMessagesRepository _repository;
public class FooController(IMessagesRepository repository)
{
_repository = repository;
}
public ActionResult Index()
{
ViewBag.messages = _repository.GetMessagesById(Membership.GetUser().ProviderUserKey.ToString());
return View();
}
}
public class BarController: Controller
{
private readonly IMessagesRepository _repository;
public class BarController(IMessagesRepository repository)
{
_repository = repository;
}
public ActionResult Index()
{
ViewBag.messages = _repository.GetMessagesById(Membership.GetUser().ProviderUserKey.ToString());
return View();
}
}
最後你會配置DI該代碼可以通過引入一個抽象的這個倉庫去耦從資源庫中的控制器來改善框架將相應的實現傳遞給這些控制器。
我也建議您更換此ViewBag
有一個強類型的視圖模型:
public class MyViewModel
{
public List<Message> Messages { get; set; }
}
然後:
public ActionResult Index()
{
var model = new MyViewModel
{
Messages = _repository.GetMessagesById(Membership.GetUser().ProviderUserKey.ToString())
};
return View(model);
}
感謝您的幫助。您提出的MessageService類是模型還是控制器類?或者它有什麼關係? – micahhoover 2011-05-21 16:12:37
它是模型類/業務邏輯。 – 2011-05-21 17:22:14