在我的班级A中,我有一个ZMQ对象
public void StartLogging(object connection)
{
var ctxt = new ZMQ.Context();
var publisher = ctxt.Socket(ZMQ.SocketType.PUB);
publisher.Bind("tcp://127.0.0.1:5000");
if (connection is uint)
{
Console.WriteLine("strange");
Console.ReadLine();
}
}
B类会做类似
的事情ClassA test=new ClassA();
C类也会做同样的事情
ClassA test=new ClassA();
这将导致创建2个ZMQ对象绑定到同一个端口,这将导致错误。我该如何解决这个问题?
答案 0 :(得分:6)
单身就是你需要的。 Jon Skeet's excellent article会告诉你超过你需要知道的事情。
在您的情况下,它可能看起来像这样:
public void StartLogging(object connection)
{
var ctxt = Singleton.Instance.Context();
var publisher = ctxt.Socket(ZMQ.SocketType.PUB);
publisher.Bind("tcp://127.0.0.1:5000");
if (connection is uint)
{
Console.WriteLine("strange");
Console.ReadLine();
}
}
public sealed class Singleton
{
private static readonly ZMQ instance = new ZMQ();
// Explicit static constructor to tell C# compiler
// not to mark type as beforefieldinit
static Singleton()
{
}
private Singleton()
{
}
public static Singleton Instance
{
get
{
return instance;
}
}
}
答案 1 :(得分:1)
singleton模式可以帮助您。
即使对于多线程应用程序也是如此。
答案 2 :(得分:0)