我正在将IoC容器引入系统.自然的问题是,它应该是单例还是传递给类使用的实例?我倾向于将它作为单例实例,因为:
以下是它的外观:
class Main
{
public static void main(params string[] args)
{
IoCContaner.Intance.Add<IBar>();
IoCContaner.Intance.Add<IBaz>();
IoCContaner.Intance.Add<IQux>();
var foo = new Foo();
Foo.DoBarStuff();
}
}
class Bar : IBar
{
public Bar(IBaz, IQuz) {}
public void DoBazStuff() { _baz.DoStuff(); }
}
class Foo
{
public void DoBarStuff()
{
var bar = IoCContaner.Intance.Resolve<IBar>();
bar.DoBazStuff();
}
}
Run Code Online (Sandbox Code Playgroud)
有什么我想念的,而实际上我应该有这样的东西:
class Foo
{
IoCContainer _c;
public Foo(IoCContainer c) { _c = c; }
...
private void DoBarStuff()
{
var …Run Code Online (Sandbox Code Playgroud) 我对.NET 4中引入的代码契约感到非常着迷(尽管在DevLabs的帮助下).但是一个好的打印让我冷静下来.这是它说的:
对我来说最大的是第一个.我不知道是否还有人编写单线程应用程序.因此,如果代码契约不能支持多线程,我看不到它们的用处.或者也许我不应该过分强调这一点,因为后置条件是用于断言方法本身的内部,可以进行单元测试.
顺便说一句,我还没有找到任何东西,我没有尝试反汇编我的代码,看看注入了哪些先决条件.我想在一个简单的方法中,当lock()首先出现时,在它之后立即注入检查很简单,但是在一个相当复杂的方法中,当锁定发生在中间的某个地方时,这可能是一个问题.或者,如果使用除lock()之外的其他一些机制.
我对DataContractSerializer的行为感到困惑.我们的配置基于XML.XML用作DataContractSerializer.ReadObject方法的源.最近,当没有设置反序列化对象的某些属性时,我遇到了一个问题.我已跟踪更改并发现这些属性已手动添加到XML中.在我看来哪个好.显然,在DataContractSerializer看来它不行,因为它似乎期望XML节点按字母顺序排序.真?!反序列化似乎非常简单 - 按顺序读取XML,解析节点名称,设置相应的属性.订购的目的是什么?
有解决方法吗?也许是DataContractSerializer的某种设置?
我在代码中使用Parallel.ForEach和PLINQ越多,我得到的面孔和代码审查就越多.所以我想知道我有什么理由不在每个LINQ语句中使用极端的PLINQ吗?运行时是否能够足够聪明地开始产生如此多的线程(或者从线程池中消耗这么多线程),应用程序性能实际上会降低而不是改进?同样的问题适用于并行库.
我确实理解与线程安全和使用多线程的开销相关的含义.我也意识到并不是一切都有利于并行化.所有我想知道我是否应该停止捍卫我的方法,只是放弃这两个好东西,因为我的同行认为我最好自己做线程控制而不是依靠.NET设施?
更新:请假设硬件足以满足使用多线程的先决条件.
我有一系列结构.foreach在通过数组进行迭代时,运算符是否会复制每个元素?据我所知foreach,只是引擎盖下的语法糖转换为for.所以似乎答案是肯定的,但我很乐意得到一些确认.
PS:似乎有人应该已经问过但我不能轻易找到任何东西.所以请以提供的参考形式投票.
有一个XML文件.我需要对它做一些统计(例如,有多少节点没有特定的属性,等等).我没有看到任何可以让我直接做到这一点的事情.有什么建议?我目前正在为Chrome使用XML Tree插件,但不仅仅是在VS之外,但它对我来说也不适用.
我在其他语言中经历过这种情况.现在我在Python中遇到了同样的问题.我有一个有很多CRUD动作的字典.可以假设从字典中删除元素应该减少它的内存占用.事实并非如此.一旦字典大小增加(通常加倍),它就永远不会(?)释放分配的内存.我运行了这个实验:
import random
import sys
import uuid
a= {}
for i in range(0, 100000):
a[uuid.uuid4()] = uuid.uuid4()
if i % 1000 == 0:
print sys.getsizeof(a)
for i in range(0, 100000):
e = random.choice(a.keys())
del a[e]
if i % 1000 == 0:
print sys.getsizeof(a)
print len(a)
Run Code Online (Sandbox Code Playgroud)
第一个循环的最后一行是6291736.第二个循环的最后一行也是6291736如此.字典的大小是0.
那么如何解决这个问题呢?有没有办法强制释放内存?
PS:不需要随机做 - 我玩第二个循环的范围.
我正在查看http://msdn.microsoft.com/en-us/library/aa691278(VS.71).aspx,其中说int的读写是原子的,而long的读写可能不是.64位平台真的如此吗?是不是IntPtr.Size == 64位还是长?我错过了什么或语言规格不够充实?
这里也有更多想法:http: //philosopherdeveloper.wordpress.com/2011/02/08/beware-assignment-atomic-assignment/
标准对象工厂可能如下所示:
interface I { ... }
class A implements I { ... }
class B implements I { ... }
class IFactory {
I getI(int i) {
switch (i) {
case 1: return new A();
default: return new B();
}
}
}
Run Code Online (Sandbox Code Playgroud)
是否可以设置绑定以便为我完成切换,即我所做的只是调用getInstance或者注入?我正在寻找辅助注射,但这似乎是不同的主题:https://code.google.com/p/google-guice/wiki/AssistedInject
我为我的struct设置了一个测试套件(https://github.com/stretchr/testify#suite-package).在我通过仅指定模式运行单个测试之前:
go test -v ./services/gateways/... -run mytest
Run Code Online (Sandbox Code Playgroud)
转换后此方法不起作用.运气不好或有办法吗?