小编App*_*ere的帖子

使用MVC控制器中的命令查询分离原则

我喜欢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中,命令没有返回值,因此上面的模式将是无效的.

任何建议都感激不尽.

c# asp.net-mvc command-query-separation

6
推荐指数
2
解决办法
2153
查看次数

使用Ninject和Udi Dahan的域事件

我在一个MVC项目中使用Ninject,并且正在尝试按照Udi Dahan的模式实现域事件http://www.udidahan.com/2009/06/14/domain-events-salvation/

在下面的摘录中,"Container"用于解析已引发的特定事件类型的所有事件处理程序.

我的问题(如果我遗漏了一些基本的东西,道歉)是如何使用Ninject做到这一点的?换一种说法:

  1. 如何在这个静态类中设置"容器"?

  2. 一旦我有一个容器(内核?),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

4
推荐指数
1
解决办法
1831
查看次数

最终参数中包含句点的WebAPI路由失败

问题

使用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​​合同而我无法做到这一点.

.NET版本

当以.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)

asp.net-web-api asp.net-web-api-routing

4
推荐指数
1
解决办法
1979
查看次数

TeamCity REST API - 谁提交了导致构建的更改?

我正在使用Team City API来获取失败的构建(用于在 JavaScript 应用程序中显示)。

我想找出是谁在 Git 中提交了更改,导致构建失败。然后我们可以将开发者的名字大而粗地放在状态显示上......

但我找不到从哪里获取用户信息。请问有什么指点吗?

git teamcity

1
推荐指数
1
解决办法
1175
查看次数