摘要:
Unity提供了根据名称空间进行匹配规则的类型NamespaceMatchingRule,它的通配符规则和MemberNameMatchingRule相同。看一个简单的示例: 配置文件如下定义: 阅读全文
posted @ 2012-08-10 11:55
junchu25
阅读(648)
评论(0)
推荐(0)
摘要:
Unity提供了基于成员名称的匹配规则类型MemberNameMatchingRule,允许根据匹配表达式进行注入。看一个简单示例: 上面的示例只有DoWork被调用。MemberNameMatchingRule提供了符号*用来完成剩余部分的匹配,如果只传递*则表示全部。 使用*: 使用后置*: 使 阅读全文
posted @ 2012-08-10 11:53
junchu25
阅读(442)
评论(0)
推荐(0)
摘要:
在声明式编程流行的今天,对于AOP中许多附加功能我们往往会通过声明一个Attribute更为直观的展示。比如需要添加一个LogHandler,那就定义一个LogSupportAttribute。Unity提供了自定义Attribute的匹配规则类型CustomAttributeMatchingRul 阅读全文
posted @ 2012-08-10 11:49
junchu25
阅读(721)
评论(0)
推荐(0)
摘要:
Unity的拦截策略中提供了程序集匹配规则,我们可以对于属于某个特定程序集的类型附加CallHandler。看一个简单的示例: AssemblyMatchingRule的构造函数允许传递字符或者Assembly信息。上面的示例传递了当前AppDomain入口的EntryAssembly,MyObje 阅读全文
posted @ 2012-08-10 11:46
junchu25
阅读(743)
评论(0)
推荐(0)
摘要:
在研究Unity的AdditionalInterfaces时候产生一个疑问,假设现有类型的函数名称和一个接口的函数名称相同,通过附加接口后创建的代理类型规范了这一组操作。下面是模拟的定义和调用: 现在通过Intercept的NewInstanceWithAdditionalInterfaces函数为 阅读全文
posted @ 2012-08-10 11:43
junchu25
阅读(368)
评论(0)
推荐(0)
摘要:
Unity提供了PolicyInjectionBehavior用来为一个类型创建时定义拦截的策略,符合特定条件的类型才会被附加特定的功能,当然之前你必须先定义使用的Interceptor。默认规则有:Assembly、CustomAttribute、Member Name、Method Signat 阅读全文
posted @ 2012-08-10 11:43
junchu25
阅读(212)
评论(0)
推荐(0)
摘要:
Unity的拦截技术可以独立使用,你不需要使用Microsoft.Practices.Unity.dll、Microsoft.Practices.Unity.Configuration.dll、Microsoft.Practices.ServiceLocation.dll。而只需要使用Microso 阅读全文
posted @ 2012-08-10 11:41
junchu25
阅读(339)
评论(0)
推荐(0)
摘要:
Unity默认提供了三种拦截器:TransparentProxyInterceptor、InterfaceInterceptor、VirtualMethodInterceptor。 TransparentProxyInterceptor:代理实现基于.NET Remoting技术,它可拦截对象的所有 阅读全文
posted @ 2012-08-10 11:40
junchu25
阅读(2519)
评论(3)
推荐(0)
摘要:
继续前一篇实现的NotifyPropertyChangedBehavior,如何在配置文件中添加: 默认Unity的配置无法识别interceptor,需要在unity配置节中添加一个sectionExtension,由InterceptionConfigurationExtension处理(Mic 阅读全文
posted @ 2012-08-10 11:38
junchu25
阅读(446)
评论(0)
推荐(0)
摘要:
Unity提供了自带的拦截器,如果你并不想编写繁琐的拦截器可以选择编写更轻量的方式Behavior。拦截器的应用场景有不少,比如一些数据访问框架,它们的核心概念是AOP。通过创建一个继承于类型的代理类型,并重写它的virtual函数将拦截器置入其中。前置处理函数负责打开数据库连接、启动事务,后置处理 阅读全文
posted @ 2012-08-10 11:36
junchu25
阅读(554)
评论(0)
推荐(0)
摘要:
Unity的函数依赖注入和之前提到的构造函数、属性使用相同。InjectionMethodAttribute指定需要注入的函数。 DependencyAttribute可以指定需要依赖注入的注册名称。OptionalDependencyAttribute在没有注册相应类型的时候默认返回null。 阅读全文
posted @ 2012-08-10 11:30
junchu25
阅读(292)
评论(0)
推荐(0)
摘要:
Unity的属性依赖注入不同于构造函数的默认注入,它需要显示为被注入的属性添加DependencyAttribute。 MyObject的MyInterface属性被注入了MyInterfaceImpl,但是MyInterface2属性由于没有DependencyAttribute则不被注入。Uni 阅读全文
posted @ 2012-08-10 11:29
junchu25
阅读(593)
评论(0)
推荐(0)
摘要:
Unity的构造函数依赖注入提供一种默认的行为,在Resolve一个类型实例时完成依赖注入(这个类型并不一定需要注册,但注入类型需要注册)。看一个简单的示例: MyObject的构造函数参数myInterface和myInterface2被注入了MyInterfaceImpl和MyInterface 阅读全文
posted @ 2012-08-10 11:27
junchu25
阅读(367)
评论(0)
推荐(0)
摘要:
Unity默认提供了ContainerControlledLifetimeManager、TransientLifetimeManager、HierarchicalLifetimeManager、PerResolveLifetimeManager、PerThreadLifetimeManager和E 阅读全文
posted @ 2012-08-10 11:24
junchu25
阅读(444)
评论(0)
推荐(0)
摘要:
Unity的Container允许树型的层次结构,比如一个Container下可以有多个子Container,这些Container下也允许有多个子Container。示例如下: 值得注意的是一般情况下父Container的销毁并不影响子Container的使用。 阅读全文
posted @ 2012-08-10 11:21
junchu25
阅读(210)
评论(0)
推荐(0)
摘要:
Unity给出一种延迟创建对象的方案,可以先获取对象的创建器 -> 再注册类型 -> 其余代码 -> 创建类型实例,创建器的类型必须是Func<T>,而不是和Func相同返回值的delegate。看一个简单示例: 由于4.0默认新增了Lazy<T>(3.5可以添加并行库System.Threadin 阅读全文
posted @ 2012-08-10 11:20
junchu25
阅读(259)
评论(0)
推荐(0)
摘要:
在一些情况下虽然我们抽象了接口或者基类型,但是配置不同的实现可能需要提供不同的初始化值,比如两个实现类型的构造函数参数相同,但一个类型的某个参数会产生变化。在Unity中可以通过ParameterOverride完成(Unity还提供了DependencyOverride、PropertyOverr 阅读全文
posted @ 2012-08-10 11:19
junchu25
阅读(287)
评论(0)
推荐(0)
摘要:
Unity允许在构造一个类型实例时对constructor、property、method进行依赖注入。比如ILogger的实现类型MyLogger有一个属性LogWritter,类型是TextWriter。它依赖一个名为LogWriter的类型注册,ILogger和MyLogger的定义如下: 首 阅读全文
posted @ 2012-08-10 11:17
junchu25
阅读(652)
评论(0)
推荐(0)
摘要:
Unity提供了四个配置节来完成类型示例的创建。使用示例类型如下: 1、lifetime,管理类型实例的生命周期。Unity默认提供了几种实现,比如常用的singleton(单例)、perthread(ThreadStatic)等。 开发人员可以通过继承于LifetimeManager自定义生命周期 阅读全文
posted @ 2012-08-10 11:07
junchu25
阅读(2015)
评论(0)
推荐(0)
摘要:
Unity提供Automatic Type Lookup,你可以在配置节中定义assembly和namespace,比如mscorlib和System: 你可以为类型定义别名,默认Unity为基元类型定义了对应的别名,等同于C#中的关键字。比如System.Int32对应int(下面的int别名可以 阅读全文
posted @ 2012-08-10 10:58
junchu25
阅读(2242)
评论(1)
推荐(1)
摘要:
1、当前AppDomain的配置文件(App.config或Web.config,通过AppDomain.CurrentDomain.SetupInformation.ConfigurationFile获得): LoadConfiguration默认会加载没有命名的container,可以通过传递特 阅读全文
posted @ 2012-08-10 10:55
junchu25
阅读(12741)
评论(0)
推荐(1)
摘要:
Development Storage始终启动不了,发现默认DSInit初始化失败。于是手动执行DSInit + 命令参数,但是出现如下错误:Failed to create database ‘DevelopmentStorageDb20090919′ : A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible. Verify that the insta 阅读全文
posted @ 2012-08-10 10:50
junchu25
阅读(333)
评论(0)
推荐(0)
摘要:
假设你的XAML上有一个控件它的属性和其它控件的某个属性相同名字,比如BorderBrush。现在我要将控件的属性BorderBrush名字改成其它名字,点击重构。你会发现所有XAML上名为BorderBrush的属性都比修改为新的名字,而不是只重构了被修改控件。 阅读全文
posted @ 2012-08-10 10:47
junchu25
阅读(125)
评论(0)
推荐(0)
摘要:
上周四产品上线一切运行正常,做了一点小改动后周四晚上发布,周五大量用户反馈在访问页面时出现长时间等待响应。将4台Web前端的服务器重启,缓存服务器2台重启,问题依旧。由于是生产环境,只能上去查看IIS、Windows日志,没有记录任何异常。于是将版本更新回周四凌晨发布版本,运行正常。据版本跟踪只修改... 阅读全文
posted @ 2012-08-10 10:44
junchu25
阅读(1030)
评论(3)
推荐(3)
摘要:
在System.Web.Compilation下默认提供了三个常用的ExpressionBuilder,比如在UI上快速访问AppSettings可以这么写:1 <%= ConfigurationManager.AppSettings["IsDebug"] %>2 <%$ appSettings:IsDebug %>%$ appSettings:IsDebug %>实际上调用了AppSettingsExpressionBuilder,这一层的转换到调用由ASP.NET页面的动态编译器负责(其实到真正动态执行某个页面时所加载的类型并不是我们编写代 阅读全文
posted @ 2012-08-10 10:41
junchu25
阅读(504)
评论(0)
推荐(0)
摘要:
新安装了Windows SDK 7.1,在设置Microsoft Helper Viewer的location时选错了路径,于是选择卸载了Helper Viewer。安装运行WCU\Helper下的HelpSetup_x64(x86).exe,提示必须在安装完成Visual Studio 2010后才可以运行。MSDN Visual Studio Forms里有人提到需要重新再次安装、修复Visual Studio或者临时删除一个已经安装的功能就可以进入到安装Helper Viewer的界面。其实还有一个最快捷的方法就是首先启动Microsoft Help Library Agent(点击任何 阅读全文
posted @ 2012-08-10 10:30
junchu25
阅读(733)
评论(0)
推荐(0)
摘要:
决定减少使用WTL用Qt,想要在Visual Studio下使用Qt需要先下载Qt的Windows SDK和Qt的Visual Studio AddIn,可以去官网下载。之后分别安装SDK和AddIn。由于Qt默认使用了mingw编译,所以需要重新编译。打开Visual Studio Command Prompt (2010),cd到Qt安装目录的qt文件夹,例如:E:cd E:\Coding\Qt\2010.05\qt再次输入configure -platform win32-msvc2010选择O和Y开始等待配置编译环境,整个过程大概需要10分钟左右,之后输入nmake开始编译(编译时间较 阅读全文
posted @ 2012-08-10 10:23
junchu25
阅读(2169)
评论(0)
推荐(0)
摘要:
在.NET Framework 4.0以上版本中Monitor的Enter函数新增加了一个重载版本,导致原先Castle.DynamicProxy中的LockBlockExpression在Emit时获取Enter函数从出现歧义(最新版本Castle已经解决了该问题,并且在2.5.2.0版本中DynamicProxy被合并到Castle.Core.dll中)。代码如下:gen.Emit(OpCodes.Call, typeof(Monitor).GetMethod(“Enter”));如果你手头上有Castle.DynamicProxy的源代码,可以将它修改如下:gen.Emit(OpCode 阅读全文
posted @ 2012-08-10 10:16
junchu25
阅读(316)
评论(0)
推荐(0)
摘要:
IFilter接口定义了Windows平台扫描文件文本的操作,不同的IFilter实现存储在注册表中。通过以下三个步骤获取:1、注册表HKEY_LOCAL_MACHINE\SOFTWARE\Classes\{文件扩展名}\PersistentHandler\下存储了文件扩展名持久化处理器,获取它的C... 阅读全文
posted @ 2012-08-10 10:11
junchu25
阅读(1794)
评论(0)
推荐(0)
摘要:
在做手写板应用中,往往会将用户的连续笔迹下的图形转换为相应的实际输入大小的文字。比如FontSize为12那么实际的宽度和高度又是多少?你可以创建一个TextBlock并设置它的FontSize,最后调用它的Measure函数获得Size:1 TextBlock tb = new TextBlock();2 tb.Text = “a”;3 tb.FontSize = 12d;4 5 tb.Measure(new Size(Double.PositiveInfinity, Double.PositiveInfinity));6 7 Size fontSize = new Size(tb.Actu 阅读全文
posted @ 2012-08-10 10:07
junchu25
阅读(513)
评论(1)
推荐(1)
摘要:
前段时间用户反馈我们的一个Active-X控件在对WPS文档进行文本域操作时无法完全替换值,但是在WORD中不存在该问题。通常来说WPS的许多接口都和WORD相同,DISPID也几乎一致(WPS Document的Application的DISPID和WORD不同,一个是0x000003e8而另一个... 阅读全文
posted @ 2012-08-10 02:19
junchu25
阅读(1037)
评论(0)
推荐(0)
摘要:
IPersistFile的Save函数可以保存当前文件,如果在WORD2003中打开一个WORD2007格式的文件,并调用Save函数,你会发现原先的2007格式丢失,当前文档成为了97-03格式。由于后缀名依然为.docx,导致WORD2007打开文档时出错。如果你将出错文档的扩展名修改为.doc... 阅读全文
posted @ 2012-08-10 02:17
junchu25
阅读(925)
评论(0)
推荐(0)
摘要:
迁移源代码服务器,于是在一台装有Windows Server 2008的机器上安装TFS 2010。在配置到准备安装服务时出错,日志内容提示由于防火墙原因端口未开放,查看日志则是在配置应用程序池的时候抛出了0×80005000的COMException,调用堆栈显示在绑定IIS的目录服务出错:System.DirectoryServices.DirectoryEntry.Bind(Boolean throwIfFail)System.DirectoryServices.DirectoryEntry.Bind()System.DirectoryServices.DirectoryEnt 阅读全文
posted @ 2012-08-10 02:15
junchu25
阅读(481)
评论(0)
推荐(0)
摘要:
由于Microsoft Network Monitor是基于硬件层面监控底层的网卡数据,所以对于本地的连接(127.0.0.1)并不经过网卡它无法capture。解决方法是为本地连接的IP加一条到网关的路由,这样连本机的IP会先到网关,再由网关转发数据到本机。假设当前IP=192.168.40.104、网关=192.168.40.254,示例如下:添加路由命令:route add [destination] mask [netmask] [gateway]route add 192.168.40.104 mask 255.255.255.255 192.168.40.254删除路由命令:rou 阅读全文
posted @ 2012-08-10 02:10
junchu25
阅读(340)
评论(0)
推荐(0)
摘要:
1、Backup Plan Verfications的错误是由于TFS的DB服务帐号和访问Network Backup Path的帐号不同。2、Grant Backup Plan Permissions提示:could not connect to database。需要在服务里查看Visual Studio Team Foundation Background Job Agent是否正常启动。 阅读全文
posted @ 2012-08-10 02:08
junchu25
阅读(269)
评论(0)
推荐(0)
摘要:
1、选中项目、属性视图。2、Always Start When Debugging = false。 阅读全文
posted @ 2012-08-10 02:07
junchu25
阅读(354)
评论(0)
推荐(0)
摘要:
Windows Server 2012直接添加Windows Server 2008 R2服务器,如果目标机器在WORKGROUPS会提示kerberos authentication error、kerberost target resolution error。通过下列操作可以解决该问题:1、打开目标机器powershell,输入并运行winrm s winrm/config/client '@{TrustedHosts="ComputerName"}',来源机器执行相同操作信任目标机器。2、目标机器运行winrm quickconfig。3、Serve 阅读全文
posted @ 2012-08-10 02:06
junchu25
阅读(301)
评论(0)
推荐(0)
摘要:
$()是sqlcmd的关键字,它相当于一个变量替换。比如$(variable),通过sqlcmd声明:/v variable=Hello,world,则在sql脚本中定义$(variable)的地方都被替换为Hello,world。假设generate schema and data时部分数据会包含HTML内容,碰巧使用jquery的$语法,执行sqlcmd时会由于关键字问题出错。解决方法是定义一个变量,该变量的值为'$'。看一个示例:sqlcmd命令行sqlcmd -s MSSQLSERVER2012 -u sa -p 123456 /v variable=$ -i &quo 阅读全文
posted @ 2012-08-10 02:05
junchu25
阅读(199)
评论(0)
推荐(0)
摘要:
个人操作系统环境Windows Server 2008 R2 SP1。1、JDK、Android SDK安装目录不要包含空格、中文字符。2、System variables示例如下:[NEW]CLASS_PATH =.;%JAVA_HOME%\lib\tools.jar;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\bin;[NEW]JAVA_HOME =D:\Coding\Java\jdk1.7.0_03[UPDATE]Path = ;%JAVA_HOME%\bin3、User variables添加示例如下:[UPDATE]Path = ;D:\Coding\And 阅读全文
posted @ 2012-08-10 02:03
junchu25
阅读(1978)
评论(0)
推荐(0)
摘要:
这两天由于源代码管理服务器的当机,准备将源服务器配置数据库迁移至新服务器。下面是TFS2010物理迁移的一些心得:1、尽可能将新服务器的计算机名称和源服务器相同。2、配置完成后,删除配置数据库,并附加同名的源数据库是无法成功使用。在访问tfs的web站点时出错。3、附加源配置数据后,需要通过命令重新... 阅读全文
posted @ 2012-08-10 02:01
junchu25
阅读(620)
评论(0)
推荐(0)
摘要:
在将TFS2010进行物理迁移后最麻烦的就是workspace的恢复。由于workspace直接关联了用户客户端的配置,如果workspace无法加载用户就需要重新创建它,并重新映射本地目录,同时源workspace的owner操作将被全部丢弃。在安装TFS2010时,如果使用windows帐户,在进行物理迁移后是无法直接将group membership同步的。不同物理机器产生的ObjectSID不同,致使在不同的物理机使用相同的计算机名和用户名也无法关联起来。可以通过观察任意Collection的ADObjects、ADObjectMemberships两张表。想要将这些帐户重新关联wor 阅读全文
posted @ 2012-08-10 02:00
junchu25
阅读(811)
评论(0)
推荐(0)
摘要:
较新的Windows SDK中提供了一种非关系型嵌入式数据库引擎ESENT(Extensible Storage Engine),它适用于那些需要高性能、较小存储空间支出的应用。ESENT已应用于AD、Windows Desktop Search、Windows Live Mail多个微软产品中。它有以下基本特点:1、事务支持、延迟提交、健壮的恢复、备份。2、记录级的锁。3、高并发的数据库访问。4、灵活的元数据定义(表、列、索引)。5、支持整形、浮点型、字符型、二进制列的索引。6、自定义列最大支持2GB、数据库最大支持16TB。如果使用natvie C++,只需要includeesent.h, 阅读全文
posted @ 2012-08-10 01:58
junchu25
阅读(928)
评论(1)
推荐(0)
摘要:
部分生产环境下客户反映基于ASP.NET MVC 1.0开发的应用程序第一次访问需要10 - 16sec不等。起初怀疑是客户应用程序的问题,但对方使用一个新建的ASP.NET MVC应用程序仍然存在这个问题。于是建议对方升级到ASP.NET MVC 3.0,但问题依旧。于是用WinDbg跟踪,看到c... 阅读全文
posted @ 2012-08-10 01:57
junchu25
阅读(386)
评论(0)
推荐(0)
摘要:
前天迁移TFS2010的虚拟机,重新映射了数据库服务器后没有发现任何问题。但是今早访问对应Web站点,点击任何一个工作项都提示:error HRESULT E_FAIL has been returned from a call to a COM component。但通过Visual Studio依然可以操作任何工作项。在MSDN的一篇名为Creating a new server from an old one: Beware of the InstanceId找到了解决方案:1、停止IIS。2、在cmd窗口中cd TFS2010 tools的安装目录,例如:C:\Program File 阅读全文
posted @ 2012-08-10 01:54
junchu25
阅读(1685)
评论(0)
推荐(0)
摘要:
通常记录站点的访问日志可以通过一个HttpModule完成,但IIS本身就已经记录了相对详细的日志,完全可以通过解析IIS日志导入到第三方存储。相比自定义HttpModule在处理记录日志时采取的各种优化方式(并发写入、队列存储),直接采集IIS日志更便捷。IIS日志最大的缺点就是cs-username无法写入自定义值(使用Windows身份认证除外),导致没有用户标识数据的可用性降低。cs-username和许多日志字段都是由HttpRequest的HTTP-HEADER存放,但你已无法修改它。IIS7以上版本微软提供了一个Advanced Logging for IIS组件,通过它用户可以 阅读全文
posted @ 2012-08-10 01:53
junchu25
阅读(1794)
评论(0)
推荐(0)
摘要:
调用IIS管理组件时编写了下面一段代码,调用函数时提示错误:Run-Time Check Failure #0 - The value of ESP was not properly saved across a function call. This is usually a result of ... 阅读全文
posted @ 2012-08-10 01:47
junchu25
阅读(11374)
评论(3)
推荐(0)
摘要:
TFS的workspace在不公开情况下,每位开发人员都是独立的。workspace更换或人员离职发现未签入的情况则无法通过Team Explorer完成撤销签出。所幸可以通过Visual Studio自带的TF.exe以命令行方式解决该问题。1、cmd -> cd C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE2、tf workspaces /server:[server] /owner:[account],查看用户对应的workspaces。3、tf status /server:[server] /wo 阅读全文
posted @ 2012-08-10 01:42
junchu25
阅读(1013)
评论(0)
推荐(0)
摘要:
iso文件可以用工具直接修改baseline.dat,[gencomp7788]下InstallOnLHS、InstallOnWin7Server的值修改为0。在线安装,需要先用命令行抽取vm_web2.exe /x,再修改,并执行setup.exe /web。安装完成,用Visual Studio启动Windows Phone Emulator提示“connection failed because of invalid command-line arguments”。于是到XDE安装目录(C:\Program Files (x86)\Microsoft XDE\1.0)尝试用命令行运行xd 阅读全文
posted @ 2012-08-10 01:40
junchu25
阅读(1307)
评论(0)
推荐(0)
摘要:
多个解决方案基于TFS2010 Build,其中有好几个Silverlight项目出错,提示:Silverlight 4 SDK is not installed。查看日志发现MSBuild的路径来源于x64,但Silverlight并不支持x64。在Build Definition Process的Configurations to Build中默认选择Any CPU修改为x86。 阅读全文
posted @ 2012-08-10 01:38
junchu25
阅读(261)
评论(0)
推荐(0)
摘要:
比如目录A下目录B已存在分支B_1,现在要对目录A进行branch,TFS会提示:you must specify B_1 as the source of the operation。要解除目录B和分支B_1的关系,要将两者都转换为Folder,merge是解决不了问题的。选中要转换的目录,Visual Studio顶部菜单 -> File -> Source Control -> Branching & Merging -> Convert to Folder。需要注意的是目录B和目录B_1都必须执行该操作,只是将B_1转换是无法解除的。 阅读全文
posted @ 2012-08-10 01:37
junchu25
阅读(717)
评论(0)
推荐(0)
摘要:
假设有多个ASP.NET MVC 应用解决方案,基于Area部署同一个站点。多个站点需要以一致的方式进行布局切换,不同Area映射View的方式不同,它们都以{AreaName}\{Views}的格式存放。相比这种访问方式,将多个Area关联的View更新到一个固定目录更便于管理,比如:App_Th... 阅读全文
posted @ 2012-08-10 01:25
junchu25
阅读(1933)
评论(0)
推荐(0)

浙公网安备 33010602011771号