我正在考虑使用#@字符!在我们的系统生成的一些COM接口中.COM类型库也导出到.NET.这些角色会在以后给我带来麻烦吗?
我今天大部分时间都测试了它,一切看起来都很好.我们的系统继续像往常一样工作.
我谨慎的原因是这些字符在MIDL中是非法的,它使用C语法作为类型名称.但我们不使用MIDL - 我们使用ICreateTypeInfo和ICreateTypeLib构建我们的类型库.看起来这只是一个MIDL限制,COM和.NET对非字母数字字符很满意.但也许有一些我不知道的东西......
我是js的初学者,我对以下代码感到困惑:
Foo = function(arg) {
this.arg = arg;
};
Foo.prototype = {
init: function () {
var f = function () {
alert("current arg: " + this.arg); // am expecting "bar", got undefined
}
f();
}
};
var yo = Foo("bar");
yo.init();
Run Code Online (Sandbox Code Playgroud)
我被期望获得"当前的arg:bar",但得到了"当前的arg:undefined".我注意到,首先将this.arg复制到"普通"变量中,并在闭包中引用此变量:
Foo.prototype = {
init: function () {
var yo = this.arg;
var f = function () {
alert("current arg: " + yo); }
f();
}
};
Run Code Online (Sandbox Code Playgroud)
我做错了什么,得到了错误的期望,还是属于js WTF之一?
我有一个客户端和服务器程序,试图相互通信.在我的服务器的策略文件中,我指定了以下内容:
grant signedBy "vivin" {
permission java.io.FilePermission "-", "read, write";
permission java.net.SocketPermission "localhost:2220-2230", "accept, connect, listen, resolve", signedBy "vivin";
};
Run Code Online (Sandbox Code Playgroud)
在我的客户的政策文件中,我有:
grant signedBy "vivin" {
permission java.net.SocketPermission "localhost:2220-2230", "accept, connect, listen, resolve", signedBy "vivin";
};
Run Code Online (Sandbox Code Playgroud)
我启动我的服务器,它侦听端口2225.然后我启动我的客户端,它尝试连接到正在侦听端口2225的服务器.不幸的是,我在服务器上收到此错误:
[java] Exception in thread "main" java.security.AccessControlException: access denied (java.net.SocketPermission 127.0.0.1:45944 accept,resolve)
[java] at java.security.AccessControlContext.checkPermission(AccessControlContext.java:323)
[java] at java.security.AccessController.checkPermission(AccessController.java:546)
[java] at java.lang.SecurityManager.checkPermission(SecurityManager.java:532)
[java] at java.lang.SecurityManager.checkAccept(SecurityManager.java:1157)
[java] at java.net.ServerSocket.implAccept(ServerSocket.java:457)
[java] at java.net.ServerSocket.accept(ServerSocket.java:421)
Run Code Online (Sandbox Code Playgroud)
端口号不断变化; 我假设它是客户端的端口号(服务器连接回客户端的位置?).那是对的吗?对于此分配,端口号上指定了限制:
您的客户端和服务器应使用Java安全管理器,并且您的项目必须包含每个策略文件的策略文件,这些文件定义了它们运行所需的权限.允许您的服务器和客户端使用2220-2230范围内的端口在localhost上相互联系.
我怎么能遵守这个限制?或者这仅适用于服务器侦听的端口?我认为如果我给出大于2231的端口的权限accept和resolve权限,我可以使它工作.但我不知道这是否违反了限制.
这是关于.Net中扩展方法可见性(特别是C#)的问题,以及为什么intellisense可能有效,但编译器在同一段代码上失败.
想象一下......
我有.Net 3.5类库,由一堆对象和一个Extension Methods类组成.这是方法之一:
namespace MyApp.Extensions
{
public static class ExtensionMethods
{
public static string ToTitleCase(this string Origcase)
{ string TitleCase = Origcase;
... implementation ...
return TitleCase;
}
}
Run Code Online (Sandbox Code Playgroud)
要在类库本身中使用扩展方法,需要其中一个方法的每个类都需要指定:
using MyApp.Extensions;
Run Code Online (Sandbox Code Playgroud)
因为这是与库的其余部分不同的命名空间.所有这一切都很好.
现在,.Net 2.0网站正确引用了这个库,类文件希望使用该库.所以它声明它是:
using MyApp.Extensions
Run Code Online (Sandbox Code Playgroud)
SEEMS工作正常,当键入字符串时,Intellisense确实看到悬挂在字符串实例上的扩展方法:
http://www.flipscript.com/test/ToTitleCase.jpg
当计划结合在一起时,我喜欢它!
然而,这是快乐的结束.
尝试构建网站时,构建失败,并显示以下消息:
http://www.flipscript.com/test/titlecaseerror.jpg
尝试将ExtensionMethods类直接复制到Web项目时,构建再次失败.这一次,因为没有预料到"这个"这个词.
奇怪的是,扩展方法确实可以作为常规静态方法使用:
http://www.flipscript.com/test/titlecaseok.jpg
...并且Build工作得很好(所以问题实际上并不是"this"关键字).事实上,无论ExtensionMethods类是在类库还是Web站点中,构建都可以工作.
换句话说,这确实解决了问题,构建将成功.
......但解决方案很糟糕.
问题:在这种情况下,是否有某种秘密技巧可以使扩展方法正常工作?
http://www.flipscript.com/test/ToTitleCase.jpg
我已经尝试过"命名空间System.Runtime.CompilerServices"技巧,但这似乎没有帮助.
什么会导致Intellisense正确地看到扩展方法,并且编译器会失败?
注意:设计的示例变量应该被称为'name'而不是'FirstName',但是你明白了.
大家好,我发现SQL Server中有许多高级特色存储过程,这些都没有在线书籍记录.我通过谷歌搜索发现了它们.以下是其中一些如果您有其他人请与我分享.
SQL Server中未记录的存储过程
sp_checknames
sp_columns_rowset
sp_enumoledbdatasources
sp_fixindex
sp_gettypestring
sp_ms_marksystemobject
sp_msaddguidcolumn
sp_msaddguidindex
sp_msaddlogin_implicit_ntlogin
sp_msadduser_implicit_ntlogin
sp_mscheck_uid_owns_anything
sp_msdbuseraccess
sp_msdbuserpriv
sp_msdependencies
sp_msdrop_object
sp_msforeachdb
sp_msforeachtable
sp_msget_qualified_name
sp_msgettools_path
sp_msgetversion
sp_msguidtostr
sp_mshelpcolumns
sp_mshelpindex
sp_mshelptype
sp_msindexspace
sp_msis_pk_col
sp_mskilldb
sp_msloginmappings
sp_mstablekeys
sp_mstablerefs
sp_mstablespace
sp_msunc_to_drive
sp_msuniquecolname
sp_msuniquename
sp_msuniqueobjectname
sp_msuniquetempname
sp_tempdbspace
sp_who2
xp_delete_file
xp_dirtree
xp_enum_oledb_providers
xp_enumcodepages
xp_enumdsn
xp_enumerrorlogs
xp_enumgroups
xp_fileexist
xp_fixeddrives
xp_get_mapi_default_profile
xp_get_mapi_profiles
xp_getnetname
xp_qv
xp_readerrorlog
xp_regaddmultistring
xp_regdeletekey
xp_regdeletevalue
xp_regenumvalues
xp_regread
xp_regremovemultistring
xp_regwrite
xp_subdirs
xp_varbintohexstr
Run Code Online (Sandbox Code Playgroud)
sp_MSforeachtable可用于遍历数据库中的所有表.以下是此有用存储过程的一些常见用法
Display the size of all tables in a database
EXEC sp_MSforeachtable @command1="EXEC sp_spaceused '?'" …Run Code Online (Sandbox Code Playgroud) 只是浏览PHP编码标准的最新版本,有些东西引起了我的注意:
http://svn.php.net/viewvc/php/php-src/trunk/CODING_STANDARDS?revision=296679&view=markup
编码标准#4声明"在编写处理字符串的函数时,请务必记住PHP保存每个字符串的长度属性,并且不应该使用strlen()计算..."
我总是使用strlen,也许它已经晚了,但是如何在PHP中访问字符串的内置长度属性?
我一直在阅读DDD,我很困惑在使用像NHibernate这样的ORM时它会如何适应.
现在我有一个.NET MVC应用程序与相当"胖"的控制器,我正在试图弄清楚如何最好地解决这个问题.将此业务逻辑移动到模型层中是最好的方法,但我不确定如何做到这一点.
我的应用程序已设置好,以便NHibernate的会话由HttpModule管理(获取会话/事务),这是由返回实体对象的存储库使用的(Think S#arp arch ...结果是真的重复了一个很多他们的功能).这些存储库由DataServices使用,它现在只是存储库的包装(它们之间的一对一映射,例如UserDataService采用UserRepository,或实际上是存储库).这些DataServices现在只确保在保存/更新时检查装饰实体类的数据注释.
通过这种方式,我的实体实际上只是数据对象,但不包含任何真实的逻辑.虽然我可以在实体类中放置一些东西(例如"批准"方法),当该操作需要执行诸如发送电子邮件或触摸其他非相关对象之类的操作时,或者,例如,检查是否有任何用户在批准之前拥有相同的电子邮件等,那么实体将需要访问其他存储库等.用IoC注入这些用户不适用于NHibernate,所以你必须使用工厂模式我假设得到这些.我不知道你怎么会在测试中嘲笑那些.
因此,我认为,下一个最合乎逻辑的方法是,每个控制器基本上都有一个服务,并将当前控制器中正在完成的所有工作提取到每个服务的方法中.我认为这可以打破DDD的想法,因为逻辑现在不再包含在实际的模型对象中.
另一种观察方式我认为这些服务中的每一个都与它所使用的数据对象形成一个单一的模型(数据存储区域的分离和对其进行操作的逻辑),但我只是想看看其他什么正在使用像NHIB这样的ORM来解决DDD的"胖控制器"问题,它通过返回填充的数据对象和存储库模型来工作.
更新 我想我的问题是我如何看待这个:NHibernate似乎把业务对象(实体)放在堆栈的底部,然后存储库继续操作.服务器使用存储库,这些服务可以使用多个存储库和其他服务(电子邮件,文件访问)来执行操作.即:应用程序>服务>存储库> Business Objects
我正在阅读的纯DDD方法似乎反映了Active Record偏差,其中CRUD函数存在于业务对象中(我直接调用User.Delete而不是来自服务的Repository.Delete),以及实际的业务对象句柄在这种情况下需要完成的事情的逻辑(如通过电子邮件发送用户,删除属于用户的文件等).即应用程序>(服务)> Business Objects>存储库
使用NHibernate,看起来我会更好地使用NHibernate函数的第一种方法,并且我正在寻找对我的逻辑的确认.或者如果我感到困惑,可以对这种分层方法如何工作进行一些澄清.我的理解是,如果我有一个"批准"方法来更新用户模型,保留它,并且让我们说,给少数人发电子邮件,这个方法应该放在用户实体对象上,但允许适当的IoC,所以我可以注入messagingService,我需要在我的服务层而不是User对象上执行此操作.
从"多UI"的角度来看,这是有道理的,因为执行操作的逻辑是从我的UI层(MVC)中取出的,并放入这些服务中...但我实际上只是将逻辑分解为另一个类而不是直接在控制器中执行它,如果我不会涉及任何其他UI,那么我刚刚交换了一个"胖控制器"用于"胖服务",因为该服务实际上将封装每个控制器动作的方法来完成它的工作.
我的数据库服务器上的空间用完了,我想快速查看所有模式中的所有表,以及每个表占用多少大小.我怎么做?
如果我能找到最胖的模式并从那里开始工作,那也很好.
.net ×2
c# ×2
asp.net-mvc ×1
closures ×1
coding-style ×1
com ×1
database ×1
intellisense ×1
java ×1
javascript ×1
methods ×1
mysql ×1
nhibernate ×1
object ×1
php ×1
policy ×1
repository ×1
sql-server ×1
strlen ×1
typelib ×1
typename ×1
vim ×1