我在c#中开发用户库时遇到了一个令人困惑的问题,我在其中创建了两个类,这些类实现了一个由API作为独立插件调用的接口......
(这意味着在编译之后,API会检测2个插件,尽管它们来自同一个项目)
我要做的是启用这两个插件之间的通信。准确地说,我想将一个对象(它的引用而不是副本)从一个插件转移到另一个......但是我失败了!
我试图制作其中一个插件Singleton并从另一个插件到达它,但由于API需要一个公共构造函数,我被迫模仿单例工作,并且有效地我已经到达了插件的实例,但是我能够到达其房产...
让我通过简化代码对其进行图式化:
让我们说这是A级(模仿单身人士的那个)
Class A:IPlugin
{
private static volatile A _instance;
public static A Instance
{
get { return _instance; }
}
public A()
{
if (_instance == null) _instance = this; // as i'm sure it's called once
}
public Foo F{get;set} // THIS IS INITIALIZED SOMEWHERE IN THAT PLUGIN'S CONTEXT
}
这是尝试从A
中提取对象的类Class B:IPlugin
{
FindFoo()
{
Foo Fb = A.Instance.F; // THAT IS ALWAYS NULL
}
}
一个非常重要的迹象和可能产生问题的迹象是:
A.F绑定到WPF控件...
我希望我已经清楚地传达了我的问题,你将能够帮助我,因为我被卡住了!
答案 0 :(得分:0)
尝试以下方法;
public interface IPlugin {
string Foo { get; set;}
}
public class A : IPlugin {
private static A _inslance { get; set;}
public static A Instance {
get {
if (_inslance == null){
_inslance = new A();
}
return _inslance;
}
}
public string Foo { get; set;}
}
public class B : IPlugin {
public string GetMeFooOfA {
get {
return A.Instance.Foo;
}
}
public string Foo { get; set;}
}
void Main()
{
A.Instance.Foo = "Test 123";
var b = new B();
Console.WriteLine(b.GetMeFooOfA);
}
您可能希望查看DI(依赖注入),例如Unity,Ninject等。框架,它将为您提供开发模块化代码时的良好平台