好的,所以我最近一直试图进入IoC.但是,我一直遇到一个障碍 - 这就是我喜欢使用模拟对象的事实.
它们快速而轻松地进行设置.
但是,如果我在代码中使用IoC,那么它会强制我创建对象的测试实现(和配置),而不是使用模拟对象(即使用moq).
最终结果是我最终得到了大量的配置文件进行测试.
此外,在测试中有许多场景,我需要在测试到测试的基础上从我的类中获得不同的行为.使用moq对象非常容易.你会如何做与IoC类似的事情?
任何帮助将非常感激.
谢谢,
迈克
好的,我正在尝试使用UTF8文本文件.我一直在努力争取作家为UTF8投入的BOF字符,它几乎可以用来读取文件,包括序列化器和其他文本阅读器.
我得到了前六个字节的数据:
0xEF
0xBB
0xBF
0xEF
0xBB
0xBF
Run Code Online (Sandbox Code Playgroud)
(现在我正在看它,我意识到那里有两个字符.那是UTF8 BOF标记吗?我对它进行双重编码)?
注意序列化器编码为UTF8,然后内存流得到一个字符串为UTF8,然后我用UTF8将字符串写入文件...似乎有很多冗余.思考?
//I'm storing this xml result to a database field. (this one includes the BOF chars)
using (MemoryStream ms = new MemoryStream())
{
Utility.SerializeXml(ms, root);
xml = Encoding.UTF8.GetString(ms.ToArray());
}
//later on, I would take that xml and then write it out to a file like this:
File.WriteAllText(path, xml, Encoding.UTF8);
public static void SerializeXml(Stream output, object data)
{
XmlSerializer xs = new XmlSerializer(data.GetType());
XmlWriterSettings settings = new XmlWriterSettings();
settings.Indent = true; …
Run Code Online (Sandbox Code Playgroud) 我正在创建一个MSBuild任务,它将读取特定注册表项的注册表.如果我在控制台应用程序中编写相同的代码行(见下文),它将返回预期的结果,但是当它在MSBuild任务中时,它不返回任何内容.
Return Registry.GetValue("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer\Setup\", "SQLPath", Nothing)
Run Code Online (Sandbox Code Playgroud)
Nothing
如果键/值对不存在,我希望上面的代码返回,如果它存在,则返回值.我Nothing
在MSBuild任务执行时得到了.是否有一些属性需要应用于MSBuild任务的Execute函数来告诉它需要读取注册表?
编辑:
以下是从MSBuild任务执行的操作:
Return Registry.GetValue("HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\MSSQLServer\Setup\", "SQLPath", Nothing)
Run Code Online (Sandbox Code Playgroud)
我相信这是由我的Vista x64机器上的注册表重定向器在32位运行MSBuild引起的.是否有任何方法可以告诉自定义MSBuild任务(用VB .Net编写),HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer\Setup\
只有在没有任何内容的情况下查看然后查看HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\MSSQLServer\Setup\
?
谢谢,
斯科特蓝
我很想知道是否可以用Ninject 替换 Spring.Net的内置IoC容器.我们在我的团队中使用Ninject在我们的其他项目中使用IoC,所以如果可能的话我想继续使用该容器.
这可能吗?有没有人写过Ninject-Spring.Net适配器?
编辑
我喜欢Spring.Net包的许多部分(数据访问,事务等),但我不喜欢依赖注入容器.我想用Ninject取代它
谢谢
dependency-injection spring.net ninject inversion-of-control
我试图写入端口0x60和0x64,没有运气.
德尔福代码:
procedure PortOut(IOport: WORD; Value: BYTE); assembler; register;
asm
XCHG DX,AX
OUT DX,AL
end;
Run Code Online (Sandbox Code Playgroud)
在调用PortOut时,我得到EPrivilege Privileged指令异常,因为IN
并且OUT
可能只作为Ring0执行.
我想知道如何获得我的应用程序的Ring0权限或如何使用一些现有的外部库写入端口0x60和0x64.
有时我的课程需要获取一些构建信息。我不是在谈论对其他对象(将被注入)的引用,而是在谈论(例如)包含唯一信息的字符串:
// Scoped as singleton!
class Repository
{
public Repository( InjectedObject injectedObject, string path ) { ... }
}
Run Code Online (Sandbox Code Playgroud)
你如何注入这个字符串?一种可能性是编写一个Init()
方法并避免注入字符串:
class Repository
{
public Repository( InjectedObject injectedObject ) { ... }
public void Init( string path ) { ... }
}
Run Code Online (Sandbox Code Playgroud)
另一种可能性是将信息包装到一个可以注入的对象中:
class InjectedRepositoryPath
{
public InjectedRepositoryPath( string path ) { ... }
public string Path { get; private set; }
}
class Repository
{
public Repository( InjectedObject injectedObject, InjectedRepositoryPath path ) { ... }
}
Run Code Online (Sandbox Code Playgroud)
这样我就必须InjectedRepositoryPath …
我的情况是Ninject 2.
// normal explicit dispose
using (var dc = new EFContext)
{
}
Run Code Online (Sandbox Code Playgroud)
但有时我需要保持上下文更长时间或在函数调用之间.所以我想通过IoC范围来控制这种行为.
// if i use this way. how do i make sure object is disposed.
var dc = ninject.Get<IContext>()
// i cannot use this since the scope can change to singleton. right ??
using (var dc = ninject.Get<IContext>())
{
}
Run Code Online (Sandbox Code Playgroud)
示例范围
Container.Bind<IContext>().To<EFContext>().InSingletonScope();
// OR
Container.Bind<IContext>().To<EFContext>().InRequestScope();
Run Code Online (Sandbox Code Playgroud) dependency-injection ninject ioc-container inversion-of-control
我正在Windows Server 2003下的CC.Net上运行带有xUnit的Watin测试.
我有很多测试,在使用TestDriven.Net的开发盒和使用xUnit gui app的服务器上运行良好.但是,当CC.Net运行测试(作为MSBuild任务的一部分)时,该功能
ie.ContainsText("some text to find");
Run Code Online (Sandbox Code Playgroud)
永远不会返回预期值.IE对象上的其他函数和属性似乎工作正常:Button(...).Click(),TextBox(...).Value等.
我知道服务帐户需要"允许服务与桌面交互".
我在本地系统和本地管理员下尝试过运行CC服务.管理员帐户只是挂起并且似乎永远不会完成运行测试(尽管它确实创建了一个iexplorer.exe进程的实例.
这是服务器上的权限问题,还是我从配置中遗漏了一些东西?
我使用Http Handler动态生成XML/Google站点地图,因此我不需要手动维护XML文件.
我已将我的Http Handler映射到我的web.config中的"sitemap.xml",如下所示:
<httpHandlers>
<add verb="*" path="sitemap.xml" type="My.Name.Space, MyAssembly" />
</httpHandlers>
Run Code Online (Sandbox Code Playgroud)
它工作得很好.现在,www.mywebsite.com/sitemap.xml将我的Http Handler设置为动作并完全按照我的意愿行事.但是,这个URL会做同样的事情:www.mywebsite.com/some/folder/sitemap.xml我真的不想要那个,即我只是想将我的处理程序映射到我的应用程序的根目录.
我已经尝试将我的web.config中处理程序的"路径"更改为"/sitemap.xml"和"〜/ sitemap.xml",但都不起作用.
我在这里错过了什么吗?
我有一个关于部署应用程序的问题,我的应用程序需要gdiplus.dll来加载图像.Windows XP是否包含GdiPlus.dll作为默认值?非常感谢!
ninject ×2
asp.net ×1
c# ×1
delphi ×1
delphi-7 ×1
deployment ×1
gdi+ ×1
httphandler ×1
io ×1
mocking ×1
msbuild ×1
msbuild-task ×1
registry ×1
spring.net ×1
tdd ×1
unicode ×1
unit-testing ×1
utf-8 ×1
watin ×1
web-config ×1
windows ×1
windows-xp ×1
xunit.net ×1