对不起我的愚蠢,但我正在寻找一种方法从连接到服务的类构造一个对象,并且还包含另一个具有该服务方法的类。
我面临的问题是试图想出一种只需连接一次服务的方法。我拒绝使用全局变量等。
我发现很难理解C#中的对象概念,因为我的编程背景主要来自JavaScript。
非常感谢任何帮助。
namespace Tests.Classes
{
public class L
{
dynamic uri;
dynamic service;
dynamic credentials;
dynamic proxy;
public L L()
{
this.uri = new Uri("bladie bladie blah");
this.credentials = new ClientCredentials();
this.credentials.Windows.ClientCredential = (NetworkCredential)CredentialCache.DefaultCredentials;
this.proxy = new OrganizationServiceProxy(this.uri, null, this.credentials, null);
this.service = (IOrganizationService)this.proxy;
return this;
}
public class OL
{
public OL OL(dynamic a)
{
this.service = parent.service; // <- doesn't compile
return this;
}
}
}
}
要明确它的名称:
var l = new L();
l.OL("haha");
也许我的代码不够清晰。这将使分类狂热分子陷入困境:P。
namespace Tests.Classes
{
public class L
{
Uri uri;
IOrganizationService service;
ClientCredentials credentials;
OrganizationServiceProxy proxy;
public L L()
{
this.uri = new Uri("hBladie Bladie Blah");
this.credentials = new ClientCredentials();
this.credentials.Windows.ClientCredential = (NetworkCredential)CredentialCache.DefaultCredentials;
this.proxy = new OrganizationServiceProxy(this.uri, null, this.credentials, null);
this.service = (IOrganizationService)this.proxy;
return this;
}
public class OL
{
Entity entity = new Entity();
IOrganizationService service = null;
public OL OL(dynamic a)
{
if (a is Entity)
{
this.entity = a;
}
if (a is string)
{
this.entity = new Entity(a);
}
return this;
}
public OL attr(dynamic key, dynamic value)
{
this.entity[key] = value;
return this;
}
public Boolean save()
{
this.parent.service.create(this.entity); // parent does not exist
}
}
}
}
我讨厌凌乱的编程,我喜欢jQuery风格。
以下是代码的使用方法:
new L().OL("haha").attr("Hello", "world").save();
或
var l = new L();
l.OL("HAHA").attr("foo", "bar").save();
l.OL("pff").attr("boppa", "deebop").save();
答案 0 :(得分:1)
那可以在Java中使用。在C#中,您需要将L传递给OL的构造函数:
public OL(dynamic O, L parent)
{
this.service = parent.service;
}
顺便说一下,你的构造函数不会编译,你有两个OL
和一个return
。
顺便说一下,你为什么要使用这么多动态?
答案 1 :(得分:0)
做这样的事情:
public class OL
{
dynamic olService = nnull;
public OL OL(dynamic a)
{
this.olService = parent.service; // <- doesn't compile
//return this; //remove this !!!!
}
}
编辑
请注意:在您真正需要之前,请尽量不要使用dynamic
。尽可能使用C#
语言中的强类型。
答案 2 :(得分:0)
如果您希望所有类的实例都存在单个service
,请将其声明为static
。 e.g:
static IOrganizationService service;
然后在您的嵌套类中,您可以通过L.service
引用它。