0

我编写了以下代码以包含 N1 和 N2 wcf 服务参考。我正在尝试编写某种工厂方法来获取代理对象的特定实例,在运行时决定。

我无法在业务代码中使用工厂分配的 proxyType out 变量,如下所示。您能否建议我缺少哪些信息?

如果我目前的方法不正确,如何使用泛型来实现这一点?或者这种场景是否有任何既定的设计模式?

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 的添加服务引用命令生成的类。如果我更新服务参考,我的代码更改将消失,并且每次我都必须重新编写代码。因此尝试在不包装这些代理类的情况下手动编写代码。

4

1 回答 1

2
public interface IProxy
{
    void Foo();
}

public class Proxy1 : IProxy
{
    public void Foo()
    {
    }
}

public class Proxy2 : IProxy
{
    public void Foo()
    {
    }
}

static class Helper
{
    public static IProxy GetProxyInstance(int i)
    {
        if (i == 1)
        {
            return new Proxy1();
        }
        else if (i == 2)
        {
            return new Proxy1();
        }
        else
        {
            return null;
        }
    }
}

class BusinessClass
{
    public void bar()
    {
        IProxy proxyObj = Helper.GetProxyInstance(1);
        proxyObj.Foo();
    }
}
于 2012-09-17T13:55:35.597 回答