在c#中开发用户库时,我遇到了一个令人困惑的问题,在这个库中,我创建了两个类,它们实现了一个接口,这个接口由API作为一个单独的插件调用.
(这意味着在编译之后,API会检测到两个插件,尽管它们来自同一个项目)
我想做的是让这两个插件之间的通信成为可能。准确地说,我想把一个对象(它是引用而不是副本)从一个插件转移到另一个.但我失败了!
我试着制作其中一个插件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控件.
我希望我已经清楚地传达了我的问题,你将能够帮助我,因为我被困住了!
发布于 2013-05-28 01:07:49
试一试以下几点;
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、Unity等。框架,它将为您在开发模块化代码时提供一个很好的工作平台。
https://stackoverflow.com/questions/16781893
复制相似问题