0

N1とN2の両方のwcfサービスリファレンスを含めるために、次のコードを記述しました。実行時に決定されたプロキシオブジェクトの特定のインスタンスを取得するために、ある種のファクトリメソッドを作成しようとしています。

以下で強調表示されているように、ビジネスコードでファクトリによって割り当てられたproxyTypeout変数を使用できません。不足している情報を教えてください。

私の現在のアプローチが正しくない場合、ジェネリックを使用してこれをどのように達成できますか?または、このシナリオの確立されたデザインパターンはありますか?

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は、VisualStudioのサービス参照コマンドの追加によって生成されたクラスです。サービス参照を更新すると、コードの変更がなくなり、コードを書き直す必要があります。したがって、これらのプロキシクラスをラップせずに手動でコードを記述しようとします。

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 に答える