我已经开始将一个项目转换为Moose,我注意到的第一件事就是我的批评/整洁测试下地狱了.Moose,Tidy和Critic似乎并不像以前那样喜欢对方.
是否有关于如何使批评/整理更加欣赏穆斯方言的文档?大多数Moose用户做什么?放松/放弃批评更重的Moose模块?自定义政策?
我有我认为是一种有点正常的情况,我需要将表单帖子绑定到"订单"模型.该模型具有以下几个级别的信息:
Order.Billing.FirstName
Order.Billing.Address.City
Order.Billing.Address.Country
Run Code Online (Sandbox Code Playgroud)
使用DefaultModelBinder,如果我将表单发布到将此Order模型作为参数的操作,则以下字段为JustWork(TM):
<%=Html.TextBox("Billing.FirstName")%>
<%=Html.TextBox("Billing.Address.City")%>
Run Code Online (Sandbox Code Playgroud)
此字段不会:
<%=Html.TextBox("Billing.Address.Country")%>
Run Code Online (Sandbox Code Playgroud)
我的皱纹是乡村财产.在我们的例子中,Address.Country返回一个Country类实例(ISO2/3/Name/Code逻辑).它不是一个字符串.毫不奇怪它默认不起作用.
我的第一个想法是创建一个CountryModelBinder(继承DefaultModelBinder)和ModelBinders.Binders.将它添加到Country的类型.当我这样做时,CountryModelBinder永远不会在上面的场景中被调用.
我的第二个想法是创建一个AddressModelBinder(继承DefaultModelBinder)并将其绑定到我们的Address类型.虽然它被调用,但SetProperty对"Country"的调用具有空值,即使表单已发布名为"Billing.Address.Country"的字段.
一些修修补补之后,看来当模型的顶层类动作的人,而其他所有的粘合剂都要求孩子自己的属性BindPropery /的SetProperty模型绑定行为只要求CreateModel.
换句话说,如果我为Order,OrderAddress(Billing),Address和Country创建模型绑定器.对于接受订单的操作,仅调用OrderModelBinder.CreateModel.ORderAddress和Address.BindProperty/SetProperty被调用用于某些事情,有时SetProperty值参数是空的,当它明确地张贴在与其他字段属性映射匹配的名称中时.
只需向OrderModelBinder添加代码就可以将Billing.Address.Country拉出Request.Form.但是我有多个使用Address的模型,并且所有这些模型看起来都很糟糕.
我在这里错过了什么?有没有办法在这种情况下实际调用CountryModelBinder?我认为当Billing.Address.Country映射到Address绑定器的Country属性时,应该调用CountryModelBinder.
我只是在.NET中调用kernel32中的GetPrivateProfileString和GetPrivateProfileSection,并遇到了一些我不理解的奇怪事情.
让我们从这个咒语开始:
Private Declare Unicode Function GetPrivateProfileString Lib "kernel32" Alias "GetPrivateProfileStringW" ( _
ByVal lpApplicationName As String, _
ByVal lpKeyName As String, _
ByVal lpDefault As String, _
ByVal lpReturnedString() As Char, _
ByVal nSize As Int32, _
ByVal lpFileName As String) As Int32
Run Code Online (Sandbox Code Playgroud)
如果我传递一个lpApplicationName(section),没有lpKeyName而没有lpDefault,我应该得到该部分的所有密钥,而且确实是这样:50%的时间.
如果ini文件在第一行开始有lpApplicationName,则缓冲区不返回任何内容.如果lpApplicationName统计信息位于文件的第二行,则返回预期值.
起初我虽然是在Declare中使用W版本和Unicode的问题,但改变它们似乎没有任何效果.
我错过了什么?
我正在开发一个快速项目来监控/处理数据.基本上,这只是监视器,计划和处理器.监视器使用计划检查数据(ftp,本地,imap,pop等)并将新数据发送到处理器.它们都有接口.
我正在尝试找到一种合理的方法来使用config来配置每个监视器使用的调度/处理器.这很简单:
<monitor type="any.class.implementing.monitor">
<schedule type="any.class.implementing.schedule">
...
</schedule>
<processor type="any.class.implementing.processor" />
</monitor>
Run Code Online (Sandbox Code Playgroud)
我正在努力解决的问题是配置任何旧监视器/日程表/处理器的最佳方法是什么.一方面,可以实现构造函数参数或属性(给出任何语法):
<monitor type="any.class.implementing.monitor">
<args>
<arg value="..." />
</args>
<properties>
<property name="..." value=..." />
</properties>
<schedule type="any.class.implementing.schedule">
...
</schedule>
<processor type="any.class.implementing.processor" />
</monitor>
Run Code Online (Sandbox Code Playgroud)
另一个解决方案是每个接口中的工厂方法,它将自定义配置作为参数:
public IMonitor Create(CustomConfigSection config);
Run Code Online (Sandbox Code Playgroud)
我见过人们都使用它们.你喜欢哪个?将配置映射到构造函数时的任何技巧?
对于DI是否能适应这种混乱,我有点不知所措.最后,它将是每个监视器实例的一组绑定,除了默认值(配置可以覆盖)之外,这似乎毫无意义.
我已经安装了一批新服务器,我终于尝试尽可能多地自动化进程.其中一部分包括对machine.config进行一些更改,比如在connectionStrings上设置configSource以及在lb池中设置机器密钥.
似乎在64位操作系统上,appcmd只影响Framework64目录中的配置,这在你运行32位应用程序之前就可以了.我需要在Framework和Framework64目录中更改配置.是否有一个秘密的参数(如/ commit:MACHINE32或其他东西),你可以用来告诉appcmd哪个配置搞乱?