Asp.net mvc 4 MessageProvider使用什么依赖项注入模式?
我有一个ContactController,在那里我在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
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);