我喜欢Command Query Separation的想法,但是无法看到如何在添加实体的MVC Controller操作中使用它,并且在添加实体后需要新实体的ID.
例如,在下面的简化示例中,服务用于创建新项目:
public ActionResult Assign(AssignViewModel viewModel)
{
var newItem = _AssignItemService.AssignItem(viewModel.ItemName, viewModel.ItemValue);
return RedirectToAction("ListItem", new {id = newItem.Id);
}
Run Code Online (Sandbox Code Playgroud)
但是当我重定向到要显示新项目的操作时,我需要知道新创建的项目的ID,以便可以从数据库中检索它.所以我必须要求服务返回新创建的项目(或至少,它的ID).
在纯CQS中,命令没有返回值,因此上面的模式将是无效的.
任何建议都感激不尽.
我在一个MVC项目中使用Ninject,并且正在尝试按照Udi Dahan的模式实现域事件http://www.udidahan.com/2009/06/14/domain-events-salvation/
在下面的摘录中,"Container"用于解析已引发的特定事件类型的所有事件处理程序.
我的问题(如果我遗漏了一些基本的东西,道歉)是如何使用Ninject做到这一点的?换一种说法:
如何在这个静态类中设置"容器"?
一旦我有一个容器(内核?),Ninject语法将解析所有事件处理程序(我假设我必须先在服务模块中注册)?
我一直在阅读帖子,只应该使用构造函数注入,并且从那里递归地解决所有内容,并且访问Ninject内核是禁止的.因此,非常感谢任何有关如何做到这一点的建议.
摘自文章
public static class DomainEvents
{
[ThreadStatic] //so that each thread has its own callbacks
private static List<Delegate> actions;
public static IContainer Container { get; set; } //as before
//Registers a callback for the given domain event
public static void Register<T>(Action<T> callback) where T : IDomainEvent
{
if (actions == null)
actions = new List<Delegate>();
actions.Add(callback);
}
//Clears callbacks passed to Register on the current thread
public static void ClearCallbacks ()
{ …Run Code Online (Sandbox Code Playgroud) asp.net-mvc dependency-injection ninject inversion-of-control domain-events
使用WebAPI,其中请求中的最后一个参数包含句点/句号 /'.'.
/api/values/dog.cat这样的"简单"路线,路线确定./api/values/mammal/dog.cat这样的更复杂的路线,返回404我的问题是如何让更复杂的路线工作?
下面的所有测试都使用从Visual Studio WebAPI模板创建的新项目.
我知道我的请求看起来像是有文件扩展名所以设置:
<modules runAllManagedModulesForAllRequests="true">
Run Code Online (Sandbox Code Playgroud)
因此,在StaticFile处理程序未找到该项之后,它会将其传递给托管处理程序.
如果我请求/api/values/mamal/dog.cat/(带有斜杠)这样可以正常工作,但不幸的是我们仍然坚持使用API合同而我无法做到这一点.
当以.NET4.0为目标并使用Visual Studio WebAPI模板时,更复杂的路由可以正常工作.
使用默认WebAPI模板定位.NET4.5时,更复杂的路由返回404.
我们的一些生产代码是在.csproj文件中以.NET4.5为目标,但<compilation targetFramework="4.0"在web.config中(并且没有<httpRuntime>元素)并且似乎处理更复杂的路由,在最终参数中有句点.
使用默认路由:
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
Run Code Online (Sandbox Code Playgroud)
一个简单的动作ValuesController:
public string Get(string id)
{
return string.Format("Param id: '{0}'", id);
}
Run Code Online (Sandbox Code Playgroud)
请求/api/values/dog.cat和路由将您带到操作.
现在更改路线以添加其他类别参数:
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{category}/{id}",
defaults: new { id = RouteParameter.Optional } …Run Code Online (Sandbox Code Playgroud) 我正在使用Team City API来获取失败的构建(用于在 JavaScript 应用程序中显示)。
我想找出是谁在 Git 中提交了更改,导致构建失败。然后我们可以将开发者的名字大而粗地放在状态显示上......
但我找不到从哪里获取用户信息。请问有什么指点吗?