0
我已经编写了以下代码以包含N1和N2 wcf服务引用。我试图编写某种工厂方法来获取代理对象的特定实例,并在运行时决定。从工厂获取不同的返回类型对象
我无法在工厂代码中使用proxyType指定的工厂代码,如下所示。你能否建议我缺少什么信息?
如何用泛型实现这一点,如果我目前的方法不正确?或者是否有针对这种情况的已建立的设计模式?
namespace N1
{
public class Proxy1
{
public void foo()
{
//do something
}
}
}
namespace N2
{
public class Proxy2
{
public void foo()
{
//do something
}
}
}
namespace N3
{
static class Helper
{
public static object getProxyInstance(int i, out Type t)
{
object objectToReturn = null;
t = null;
if (i == 1)
{
objectToReturn = new N1.Proxy1();
t = typeof(N1.Proxy1);
}
else if (i == 2)
{
objectToReturn = new N2.Proxy2();
t = typeof(N2.Proxy2);
}
return objectToReturn;
}
}
}
namespace N4
{
class BusinessClass
{
public void bar()
{
Type proxyType;
var proxyObj = (proxyType)N3.Helper.getProxyInstance(1, out proxyType);
}
}
}
var proxyObj = (**proxyType**)N3.Helper.getProxyInstance(1, out proxyType);
Type or namespace proxyType could not be found.
编辑:这里的挑战是 - PROXY1 & Proxy2将是由Visual Studio添加服务引用命令生成的类。如果我更新服务引用,我的代码更改将消失,每次我都需要重新编写代码。因此,尝试手动编写代码而不包装这些代理类。
为什么你不会只有一个IProxy接口,它们都实现了。 – SimpleVar
@YoryeNathan由于Proxy1和Proxy2是通过添加服务引用生成的类。如果我使用Visual Studio更新服务引用,那么我的代码更改将消失,并且每次我都必须重新编写代码。 – Abhijeet
Visual Studio生成的类通常是部分的。因此,您可能可以通过创建两个新文件来使两个类都实现一个接口,每个文件也都声明所讨论的类为partial,并将它们声明为接口的实现者。我想这很可能是VS生成部分类的原因。 – tomfanning