小编Ant*_*pod的帖子

带有requirejs的angular-ui-router,延迟加载控制器

你能帮我理解如何在视图之前的下面的例子中加载控制器吗?看起来在尚未加载控制器的情况下立即加载视图.

//app.js
$stateProvider.state('index', {
    url: "/",
    views: {
        "topMenu": {
            templateUrl: "/Home/TopMenu",
            controller: function($scope, $injector) {
                require(['controllers/top-menu-controller'], function(module) {
                    $injector.invoke(module, this, { '$scope': $scope });
                });
            }
        }
    }
});

//top-menu-controller.js
define(['app'], function (app) {
    app.controller('TopMenuCtrl', ['$scope', function ($scope) {
        $scope.message = "It works";
    }]);
});

//Home/TopMenu
<h3>TopMenu</h3>
<div ng-controller="TopMenuCtrl">
    {{message}}
</div>
Run Code Online (Sandbox Code Playgroud)

requirejs angularjs angular-ui-router

13
推荐指数
2
解决办法
1万
查看次数

GetResourceSet不会加载回退值

我有两个文件:Resources.resx和Resources.de.resx.

在此输入图像描述

Resources.de.resx只包含一个已翻译的值.我使用以下方法加载所有资源键/值:

        ResourceSet resourceSet = Resources.ResourceManager.GetResourceSet(Thread.CurrentThread.CurrentCulture, true, true);
Run Code Online (Sandbox Code Playgroud)

当我第一次加载资源集时,我的Thread.CurrentThread.CurrentCulture.Name是空字符串,Thread.CurrentThread.CurrentCulture.NativeName ="Invariant Language(Invariant Country)",Thread.CurrentThread.CurrentCulture.LCID = 127.

因此,资源集有200个键,其值从Resources.resx按预期加载.然后我使用以下代码切换当前文化,该代码通过单击按钮触发:

        Thread.CurrentThread.CurrentCulture = new CultureInfo("de");
        Thread.CurrentThread.CurrentUICulture = Thread.CurrentThread.CurrentCulture;
Run Code Online (Sandbox Code Playgroud)

当我现在加载资源集时,我在集合中只有一个键.它是Resources.de.resx的翻译密钥.但我仍然期望有200个键,只有一个项目被翻译成德语(de)语言.

当前德语(de)文化的父文化是与我第一次调用该方法获取资源集时相同的不变语言文化.基本上,由于某些原因看起来后备不起作用.你能告诉我我做错了什么吗?

c# resources

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

如何轻松找到未使用的公共方法/属性

我有一个.Net(C#)解决方案.该解决方案包含大量项目.这些项目不是我实施的.它不是一个框架,它意味着我需要尽可能少的公共方法/属性.我的任务是确定未使用但存在于项目中的方法和属性.好吧,我可以找到不使用R#的私有方法.但是如何找到未使用的公共方法/属性是完全不清楚的.

我听说他们有NDepend工具,但它不是很简单的工具,是吗.

所以,问题是:请你指出一个工具,可以用来识别解决方案中没有使用的方法.我可以使用命令行工具或非常简单的东西.

UPD:我试过使用试用NDepend.

好吧,首先,似乎可以看到公共方法(属性表示为get_set_方法),这些方法未在此特定程序集中使用.

但NDepend无法识别公共方法是否来自另一个项目/程序集,这是解决方案的一部分,并将该方法显示为未使用.但是这是错误的.

UPD2:mcintyre321建议使用R#.请阅读下面的第一条评论.

.net methods refactoring properties public-method

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

FailOnError在自定义NAnt任务中不起作用

我有自定义的NAnt任务用于测试目的,如果任务失败,我想取消NAnt构建过程.我创建了自定义ErrorTask:

[NAnt.Core.Attributes.TaskName("errorTask")]
public class ErrorTask : NAnt.Core.Task
{
    public ErrorTask()
    {
        FailOnError = true;
    }

    protected override void ExecuteTask()
    {
        Log(NAnt.Core.Level.Error, "Error!");
    }
}
Run Code Online (Sandbox Code Playgroud)

这是我在NAnt构建文件中的内容:

<target name="errorTarget"> 
    <errorTask failonerror="true" />
    <errorTask failonerror="true" />
</target>
Run Code Online (Sandbox Code Playgroud)

在结果(build.log)中我有:

errorTarget:
[errorTask] Error!
[errorTask] Error!
BUILD SUCCEEDED - 2 non-fatal error(s), 0 warning(s)
Total time: 0 seconds.
Run Code Online (Sandbox Code Playgroud)

所以,我可以看到第二个任务也在运行,但是我想取消它,因为第一个调用返回"Error!".你能协助我修理吗?

另外,我假设,没有必要对FailOnError值进行硬编码,它应该足以在构建脚本中使用failonerror属性,但在任何情况下它都不适用于我.

谢谢.

nant nant-task

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

如何使用MongoDB C#驱动程序调用obj.ToBsonDocument()来全局忽略空值?

史前史:我有一个从XML模式(XSD)生成的类层次结构(一个很大的层次结构).

MyObj obj;
Run Code Online (Sandbox Code Playgroud)

现在:我需要解析一个字符串值,它实际上是一个使用生成的类层次结构的对象的XML,然后我需要将该对象放入MongoDB.代码是:

private BsonDocument XmlToBson(string content)
{
    MyObj obj;
    using (var reader = new StringReader(content))
    {
        var serializer = new XmlSerializer(typeof(MyObj));
        obj = (MyObj) serializer.Deserialize(reader);
    }

    return obj.ToBsonDocument();
}
Run Code Online (Sandbox Code Playgroud)

问题:我在层次结构中有很多null子对象,它在Robomongo中看起来像这样:

添加了null的对象

我想避免将空对象添加到数据库中.我知道我可以逐个忽略它们,就像这里描述的那样通过使用属性或lambda表达式忽略默认值.但由于层次结构庞大而复杂,我不喜欢这种方法.我懒得列出当它们具有空值时必须被忽略的所有属性.更重要的是,该类可以在将来重新生成,并且支持必须忽略的属性列表将是一场噩梦.

问题:无论对象在层次结构中的哪个位置,如何实现目标并忽略全局空值?我正在使用MongoDB C#驱动程序版本.2.2.

c# mongodb bson

6
推荐指数
3
解决办法
2278
查看次数

如何对覆盖的OnModelCreating中的设置进行单元测试

我正在使用Entity Framework 6,在我的上下文中,我重写了OnModelCreating方法:

protected override void OnModelCreating(DbModelBuilder modelBuilder)
Run Code Online (Sandbox Code Playgroud)

在该方法内部,我设置了数据库配置。我想测试一下设置。例如,我有以下代码:

modelBuilder.HasDefaultSchema("public");
Run Code Online (Sandbox Code Playgroud)

我想进行单元测试,以检查是否调用了具有参数值“ public”的HasDefaultSchema。

或像下面的示例一样,我想测试实体UserGroup的HasMany和WithMany方法是否被调用:

 modelBuilder.Entity<UserGroup>()
             .HasMany<User>(g => g.Users)
             .WithMany(u => u.Groups)
             .Map(ug =>
                  {
                     ug.MapLeftKey("GroupId");
                     ug.MapRightKey("UserId");
                     ug.ToTable("UserGroupMembers");
                  });
Run Code Online (Sandbox Code Playgroud)

请指教。谢谢

unit-testing entity-framework

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

动态测试用例

我们正在使用NUnit来运行我们的集成测试.其中一个测试应始终相同,但采用不同的输入参数.不幸的是,我们不能使用[TestCase]属性,因为我们的测试用例存储在外部存储中.我们有动态测试用例,我们的QA工程师可以添加,删除或禁用(不删除).QA人员无法将[TestCase]属性添加到我们的C#代码中.他们所能做的就是将它们添加到存储中.

我的目标是将存储中的测试用例读入内存,使用所有已启用的测试用例运行测试,报告测试用例是否失败.我不能使用"foreach"语句,因为如果测试用例#1失败,那么其余的测试用例将根本不运行.我们已经有了生成NUnit报告的构建服务器(CruiseControl.net),因此我想继续使用NUnit.

你能指出一种如何实现我的目标的方法吗?谢谢.

nunit automated-tests testcase

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

ASP.Net Web API。一个项目中的JSON和XML响应

我有一个ASP.Net Web API项目,该项目已经包含用于以JSON格式返回结果的控制器。现在,我必须添加新的控制器,该控制器应仅接收和返回XML。我知道我可以使用以下选项来推送控制器以返回XML序列化的对象:

GlobalConfiguration.Configuration.Formatters.XmlFormatter.UseXmlSerializer = true
Run Code Online (Sandbox Code Playgroud)

但是,如果我愿意,我希望旧的控制器也将返回XML格式的数据,对吗?这不是我所需要的。那么,如何才能实现我的目标并仅从某些控制器返回XML序列化对象?谢谢。

更新

我尝试了建议的方法,但对我不起作用。我正在使用Fiddler进行测试。请注意,结果仍然是JSON(最后一个屏幕截图)。以下是其他信息:

控制器:

控制者

要求类别:

要求等级

回应类别:

回应等级

在Fiddler中的要求:

提琴手的要求

提琴手的回应:

提琴手的回应

controller xml-serialization jsonserializer asp.net-web-api

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

如何使用ASP.Net MVC5和OWIN返回StatusCode 401

我想知道如何使用ASP.Net MVC5,我的IExceptionFilter,Microsoft.Owin和ui-router(https://github.com/angular-ui/ui-router)的实现.

我的情况是:当权限出现问题时,我会使用以下内容向客户端发送响应:

    public void OnException(ExceptionContext filterContext)
    {
        if (filterContext.Exception == null)
        {
            return;
        }

        ...

        filterContext.HttpContext.Response.StatusCode = (int)HttpStatusCode.Unauthorized;
        filterContext.Result = "Unathorized access";
    }
Run Code Online (Sandbox Code Playgroud)

请注意:我已将StatusCode代码设置为401.

要从服务器获取视图模板,我使用$ stateProvide请求Action方法.如您所知,$ stateProvide是ui-router的核心部分,可以处理$ stateChangeError.不幸的是,不是我的情况.

我需要使用Microsoft.Owin.由于某些原因,我的响应有StatusCode = 200(不是401)并且具有"X-Responded-JSON"标头:

X-Responded-JSON:{"status":401,"headers":{"location":"<URL>"}}
Run Code Online (Sandbox Code Playgroud)

以下是来自http://kevin-junghans.blogspot.de/2013/12/returning-401-http-status-code-on.html的引用"... OWIN和MVC 5中的安全管道已经改变,自定义属性不再返回401和403状态代码.而是返回200状态代码并在标题中插入一些其他信息......"

基本上,这意味着不会触发$ stateChangeError.

有人知道如何解决这个问题吗?谢谢.

asp.net-mvc angularjs owin asp.net-mvc-5 angular-ui-router

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

AngularJS - 使用ngRepeat指令的自定义过滤器

我想将自定义过滤器与ngRepeat指令一起使用.这就是我所拥有的

HTML:

<div ng-app="menuApp">
    <ul ng-controller="MenuCtrl">
        <li ng-repeat="item in menuItems | rootCategories">
            {{item.Name}}
        </li>
    </ul>
</div>
Run Code Online (Sandbox Code Playgroud)

JS:

angular.module('menuApp', [])
    .filter('rootCategories', function() {
        return function(item) {
            return item.Parent == 0;
        };
    });

function MenuCtrl($scope) {
    $scope.menuItems = [{ "Id": 1, "Name": "Sweep", "Parent": 0 }];

    /*
    $scope.rootCategories = function(item) {
        return item.Parent == 0;
    };
    */
};
Run Code Online (Sandbox Code Playgroud)

我不想使用注释掉的方式来过滤我的项目,因为真正的过滤器将比提供的示例复杂.由于某些原因,输入参数"item"未定义,因此我什么也看不见.你能告诉我有什么问题吗?谢谢.

angularjs angularjs-ng-repeat

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