小编dan*_*wig的帖子

AutoMapper:MapFrom和ResolveUsing有什么区别?

忽略ResolveUsing采用IValueResolver 的重载,并仅查看这两种方法:

void ResolveUsing(Func<TSource, object> resolver);
void MapFrom<TMember>(Expression<Func<TSource, TMember>> sourceMember);
Run Code Online (Sandbox Code Playgroud)

这两者之间的主要区别似乎是ResolveUsinga Func<TSource, object>,而MapFrom需要a Expression<Func<TSource, TMember>>.

但是,在实际上使用lambda表达式的这些方法之一的客户端代码中,它们似乎是可互换的:

Mapper.CreateMap<SourceType, DestType>() // uses ResolveUsing
   .ForMember(d => d.DestPropX, o => o.ResolveUsing(s => s.SourcePropY));

Mapper.CreateMap<SourceType, DestType>() // uses MapFrom
   .ForMember(d => d.DestPropX, o => o.MapFrom(s => s.SourcePropY));
Run Code Online (Sandbox Code Playgroud)

那么上述两种选择之间最终的区别是什么呢?一个比另一个快吗?一个是比另一个更好的选择,如果是,何时/为什么?

automapper automapper-2

51
推荐指数
3
解决办法
3万
查看次数

我可以/应该怎么做这个git gc错误?(rm:无法取消链接包权限被拒绝)

运行git gc时,我一直看到这个错误:

rm: cannot unlink 'pack-30b1ff2[reset of hash].pack': Permission denied
Run Code Online (Sandbox Code Playgroud)

我可以/应该对此错误做些什么?

更新

对不起,我应该提供更多信息.是的,我尝试过重启.事实上,重新启动之前已经为我修复了gc问题.

我只注意到这个问题,因为当我打开Git Gui时,它会立即提示我压缩数据库.我最终注意到,经过几次打开Git Gui,它一直在提示我,即使我点击了Yes,它又回来了"成功".

那么我尝试使用Git EXT的设置 - Git维护 - 压缩git数据库命令来运行它.这个命令告诉我有一个错误(Git EXT中的红灯,而Git Gui中有绿灯).

我上面发布的错误是直接从git bash运行git gc.

我应该安排磁盘扫描吗?坏道会造成这种情况吗?我希望这将是一个快速的答案:(

git garbage-collection permission-denied

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

这是AutoMapper 2.0.0和2.2.0之间的重大变化吗?

我今天从AutoMapper 2.0.0更新到2.2.0,并意识到更新破坏了一些代码.想要在automapper github网站上发布问题之前在这里问一下这个问题.

我的一个目标类型初始化一个集合属性,如下所示:

public class PageOf<TModel>
{
    public PageOf()
    {
        Items = Enumerable.Empty<TModel>();
    }

    public IEnumerable<TModel> Items { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

使用automapper 2.0.0,这很好.当我更新到2.2.0时,映射到此目标类型会导致NotSupportedException,并显示消息"Collection is a fixed size".(该异常包含在AutoMapperMappingException中.)

我能够通过将上面的构造函数代码更改为此来解决此问题:

public PageOf()
{
    Items = new List<TModel>();
}
Run Code Online (Sandbox Code Playgroud)

似乎AutoMapper 2.0.0正在丢弃Items属性中的任何值并使用setProperty访问器,而AutoMapper 2.2.0只是使用get属性访问器并尝试修改现有的IEnumerable.它看起来Enumerable.Empty<TModel>()只是替换一个零长度数组,这将解释异常.

这是一个错误吗?AutoMapper在2.0.0和2.2.0之间的变化会导致它忽略目标属性设置器,而是尝试修改现有的集合?

更新:

根据要求,这是CreateMap调用:

public class PagedQueryResultToPageOfItemsProfiler : Profile
{
    protected override void Configure()
    {
        CreateMap<PagedQueryResult<EstablishmentView>, PageOfEstablishmentApiModel>();
    }
}
Run Code Online (Sandbox Code Playgroud)

PageOfEstablishmentApiModel类从继承PageOf<EstablishmentApiModel>.

这是Mapper.Map代码:

var query = Mapper.Map<EstablishmentViewsByKeyword>(input);
var results = _queryProcessor.Execute(query);
var …
Run Code Online (Sandbox Code Playgroud)

c# collections ienumerable automapper automapper-2

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

我可以在TypeScript lambda中访问其他吗?

在打字稿中,我可以这样写:

$('#something').fadeOut(400, (): void => {
    this.invokeAnotherMethod();
});
Run Code Online (Sandbox Code Playgroud)

编译时,TypeScript会自动确保这指向我的类而不是封闭的函数:

var _this = this;
$('#something').fadeOut(400, function() {
    _this.invokeAnotherMethod();
});
Run Code Online (Sandbox Code Playgroud)

但是,当我需要访问真实的而不是外部_this时呢?有语法可以参考吗?例如,我如何编写将编译为以下代码:

var _this = this;
$('#something').fadeOut(400, function() {
    $(this).data('specialhide', true);
    _this.invokeAnotherMethod();
});
Run Code Online (Sandbox Code Playgroud)

可能吗?

typescript

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

基于表达式使用angular动态打开/关闭弹出窗口(或工具提示)的好方法?

我有一个连接到角度的表单,使用它进行验证.我能够使用ng-show指令显示错误消息,如下所示:

<span ng-show="t3.f.needsAttention(f.fieldName)" ng-cloak>
    <span ng-show="f.fieldName.$error.required && !f.fieldName.$viewValue">
        This field is required.
    </span>
</span>
Run Code Online (Sandbox Code Playgroud)

.. f表单在哪里,t3来自表单上的自定义指令,用于检测是否尝试提交,并包含用于检查字段有效性的函数.

我想要完成的是在popover中显示验证消息.无论是bootstrap的原生popover,还是来自UI Bootstrap的popover ,我都加载了.我也可以考虑AngularStrap,如果使用该lib更容易.

我现在正在努力的是一般的弹出窗口的性质 - 它们基于点击,鼠标中心,模糊等用户事件自动显示.我想要做的是显示和隐藏基于相同的弹出窗口上面的ng-show属性中的函数.因此,当表达式返回false时隐藏它,当它返回true时,显示它.

我知道bootstrap有这个.popover('show'),但是我不应该告诉有关dom的任何角度,所以我不确定如何访问$(element).popover()if在自定义表单控制器功能中执行此操作.我错过了什么吗?

更新

重复投票中提到的解决方案仍然只显示mouseenter上的popover.我想强制它显示,好像在做$('#popover_id').popover('show').

popover twitter-bootstrap angularjs angular-ui-bootstrap angular-strap

28
推荐指数
4
解决办法
8万
查看次数

如何修复对象和其他初始值设定项上的ReSharper缩进

我发现了这个问题的其他重复,但它们已经很老了,解决方案不适用于R#8,因为设置已经改变.

当我做匿名类型或对象初始化(任何类型的花括号缩进与内容),我希望它是BSD风格:

var test = new CustomType
{
    Prop1 = value1,
    Prop2 = value2,
};
Run Code Online (Sandbox Code Playgroud)

...并将R#选项/代码编辑/ C#/格式化样式/大括号布局/数组和对象初始值设置为"下一行(BSD样式)".但是,当我在添加一个新的大括号后按Enter键时,我仍然最终得到这个:

var test = new CustomType
           {
               Prop1 = value1,
               Prop2 = value2,
           };
Run Code Online (Sandbox Code Playgroud)

......我相信是白人的风格.

我需要做些什么才能让R#8不缩进初始化器的大括号?

c# resharper code-formatting curly-braces resharper-8.0

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

为什么我在使用Azure缓存(.NET MVC3应用程序)时无法组合[Authorize]和[OutputCache]属性?

使用Windows Azure Microsoft.Web.DistributedCache.DistributedCacheOutputCacheProvider作为MVC3应用程序的outputCache提供程序.以下是相关的操作方法:

[ActionName("sample-cached-page")]
[OutputCache(Duration = 300, VaryByCustom = "User", 
    Location = OutputCacheLocation.Server)]
[Authorize(Users = "me@mydomain.tld,another@otherdomain.tld")]
public virtual ActionResult SampleCachedPage()
{
    return View();
}
Run Code Online (Sandbox Code Playgroud)

从Web浏览器加载此视图时出现以下异常:

System.Configuration.Provider.ProviderException: When using a custom output cache provider like 'DistributedCache', only the following expiration policies and cache features are supported: file dependencies, absolute expirations, static validation callbacks and static substitution callbacks.

System.Configuration.Provider.ProviderException: When using a custom output cache provider like 'DistributedCache', only the following expiration policies and cache features are supported:  file dependencies, absolute …
Run Code Online (Sandbox Code Playgroud)

outputcache azure authorize-attribute asp.net-mvc-3

19
推荐指数
2
解决办法
6074
查看次数

Mongodb对更新与替换的影响

我已经阅读了这个相关的问题,但下面的一个是不同的.mongodb c#驱动程序ReplaceOne在文档集合类上有一个方法(和一个异步对应项),可用于替换适合filter参数的文档的整个内容.另一种方法是使用UpdateOne或者UpdateMany方法(或异步对应物),这需要构建一个UpdateDefinition<TDocument>.

我的问题与选择其中一种方法相对于另一种方法(替换vs更新)的影响有关,如果您有足够的输入数据来选择实现相同的结果.换句话说,如果我有整个原始文档,并且只希望更新其内容的一小部分.

我能想到的第一个因素是发送到数据库服务器的有效负载.虽然我没有读过任何mongodb c#驱动程序源并且找不到任何文件来验证这一点,但似乎ReplaceOne可能需要通过更新操作发送更多字节,特别是对于较大的文档.该Update...方法看起来他们可以通过只在发送更新的元数据文件需要修改的(除了筛选标准,这两种方法都必须发送)切片逃脱较小的有效载荷.任何人都可以验证这是否是一个准确的假设?

同事提出的另一个因素是方法的选择(更新与替换)也可能影响文档索引.这里的假设是,使用ReplaceOne有可能导致数据库重建正在更新的文档的所有索引,而这些Update...方法具有足够的更改元数据信息,以避免在不属于更新定义中的元数据的字段上重建索引.任何人都可以验证mongodb是否在内部处理文档索引构建方式不同,具体取决于是否使用replace和update修改了文档?

对于我们来说,第三个因素已经出现了几次,关于课程AddToSetPullFilter方法Update<TDefinition>.看起来这些Update...方法不允许你通过向它添加项目和同时从中删除项目来修改文档中的集合(如json数组); 这些操作必须单独发送,使用2个单独的Update...方法调用以及单独的Update<TDefinition>实例(尽管使用相同的过滤器参数).ReplaceOne在这种情况下,该方法似乎是在单个"事务"中进行此类文档更改的唯一方法,至少在使用C#驱动程序时.目前,我们正在使用Update...超过ReplaceOne现在,因为我们不确定是否如上面提到的替代方案将产生负面影响的索引.

除了这些之外,还有什么其他影响可能导致人们选择ReplaceOne家庭方法而不是Update...家庭,反之亦然?同样,这假设你有足够的输入数据(即所有文档数据)来实现两种方法相同的结果,不介意直接改变状态(通过替换),并且不介意构建mongo定义(通过更新) .

c# replace updates mongodb

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

"富域模型"能否违反单一责任原则?

刚刚输入这个问题时出现了一个有趣的线索.我不认为它回答了我的问题.

我一直在使用.NET MVC3,在那里需要一个贫血的模型.查看模型和编辑模型最好是作为可以从控制器传递到视图的哑数据容器.任何类型的应用程序流都应来自控制器,并且视图处理UI问题.在MVC中,我们不希望模型中有任何行为.

但是,我们也不希望控制器中有任何业务逻辑.对于较大的应用程序的最好保持域代码单独的和独立的模型,视图和控制器(和HTTP一般为此事).因此,有一个单独的项目提供,任何事情之前,领域模型(以实体和值对象,根据DDD组合成聚集).

我做了一些尝试从一个贫血模型对域代码更丰富的一个,离开,我想放弃.在我看来,包含数据和行为的实体类都违反了SRP.

以网络上的一个非常常见的场景为例,撰写电子邮件.鉴于某些事件,在给定EmailTemplate,EmailAddress和自定义值的情况下,域的责任是撰写EmailMessage对象.模板作为具有属性的实体存在,并且自定义值由用户提供为输入.我们还为了论证而说,EmailMessage的FROM地址可以由外部服务(IConfigurationManager.DefaultFromMailAddress)提供.鉴于这些要求,似乎富域模型可以赋予EmailTemplate组成EmailMessage的责任:

public class EmailTemplate
{
    public EmailMessage ComposeMessageTo(EmailAddress to, 
        IDictionary<string, string> customValues, IConfigurationManager config)
    {
        var emailMessage = new EmailMessage(); // internal constructor
                                            // extension method
        emailMessage.Body = this.BodyFormat.ApplyCustomValues(customValues);
        emailMessage.From = this.From ?? config.DefaultFromMailAddress;
        // bla bla bla
        return emailMessage;
    }
}
Run Code Online (Sandbox Code Playgroud)

这是我对富域模型的尝试之一.但是,在添加此方法之后,EmailTemplate负责包含实体数据属性和撰写消息.它大约有15行,并且似乎分散了这个类的真实意味着成为一个EmailTemplate - IMO,它只是存储数据(主题格式,正文格式,附件和可选的/回复地址) ).

我最终将这个方法重构为一个专门的类,由于以前的论点,我们自己负责组成一个EmailMessage,我对此感到非常高兴.事实上,我开始偏爱贫血领域,因为它帮助我将责任分开,使课程和单元测试更短,更简洁,更专注.似乎使实体和其他数据对象"没有行为"可能有助于分离责任.还是我在这里偏离轨道?

domain-driven-design single-responsibility-principle anemic-domain-model

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

ASP.NET WebAPI:如何控制返回给客户端的字符串内容?

在WebAPI中,假设我返回一个包含在HTTP响应中的字符串:

return Request.CreateResponse(HttpStatusCode.BadRequest, "Line1 \r\n Line2");
Run Code Online (Sandbox Code Playgroud)

从jQuery调用此操作时,响应文本将在返回之前得到处理.所以在xhr中,我得到这样的东西:

function success(xhr) {
    alert(xhr.responseText); // alerts ""Line1 \\r\\n Line2""
}
Run Code Online (Sandbox Code Playgroud)

换句话说,字符串用双引号括起来,特殊字符被转义,以便它们出现在输出中(实际警报是"Line1\r \n Line2",因此新行不会被保留,而是编码并显示在响应文本).

我可以通过删除引号并替换客户端上的换行符来解决这个问题:

var responseText = xhr.responseText.substr(1, xhr.responseText - 2)
    .replace('\\r', '\r').replace('\\n', '\n');
Run Code Online (Sandbox Code Playgroud)

但有没有办法告诉WebAPI如何格式化字符串响应?例如,不要用双引号将它们包装起来并转换转义字符?

httpresponse string-formatting asp.net-web-api

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