Asp.net mvc 4 MessageProvider使用什么依赖项注入模式?

Asp.net mvc 4 MessageProvider使用什么依赖项注入模式?,asp.net-mvc-4,dependency-injection,service-locator,ambientcontext,Asp.net Mvc 4,Dependency Injection,Service Locator,Ambientcontext,我有一个ContactController,在那里我在TempData中设置了一条消息(这是为了在成功提交后在屏幕上显示一条消息),在布局中,有一个部分\u message.cshtml,它应该呈现消息(如果有的话)。方法签名如下: List<Message> GetMessages(IDictionary<string, object> dictionary); void SetMessage(IDictionary<string, object> dict

我有一个ContactController,在那里我在
TempData
中设置了一条消息(这是为了在成功提交后在屏幕上显示一条消息),在布局中,有一个部分
\u message.cshtml
,它应该呈现消息(如果有的话)。方法签名如下:

List<Message> GetMessages(IDictionary<string, object> dictionary);
void SetMessage(IDictionary<string, object> dictionary, string body, MessageType type);
但是,我们可以使用另一种依赖注入模式来避免
服务定位器
反模式吗

我认为这个
MessageProvider
有一个很好的默认实现,因为我们将来可能需要在更多的控制器中使用它,这可能是本书中提到的
Ambient Context
设计模式的一个很好的候选者

这样,我将消除将来必须更改其他控制器构造函数的潜在问题。如果我碰巧必须在这些构造函数中设置消息,我将消除在
MyCustomViewPage
构造函数中使用
Service Locator
反模式的需要,并且我的控制器仍然是可测试的

然后,我将在局部视图中使用以下代码:

var messages = MessageProvider.Current.GetMessages()
以及我的控制器中的以下代码:

MessageProvider.Current.SetMessage("Message sent successfully.", MessageType.Success);
在我的测试装置中(如果我真的需要另一个实现):


你认为这种方法有意义吗?我可能遗漏了什么缺点?

对于将来可能会寻找相同答案的任何人,我决定使用
环境上下文
,因为我在问题中提到的原因

MessageProvider.Current.SetMessage("Message sent successfully.", MessageType.Success);
MessageProvider.SetMessageProvider(otherImplementation);