我编写了以下代码来包含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的添加服务引用命令生成的类。 如果我更新服务引用,我的代码更改将消失,每次我将不得不重新编写代码。 因此, 尝试编写代码而不必手动包装这些代理类。

#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();
    }
}

  ask by Abhijeet translate from so

未解决问题?本站智能推荐:

4回复

设计问题:获取子对象类型信息,避免表示层中的语句

我有一个像这样的客户层次结构: 当我检索客户时,我想在网络表单上显示要编辑/修改的属性。 目前,我使用if语句来查找子客户类型并显示专用属性。 是否有设计模式(访问者?)或更好的方式,所以我可以避免表示层中的“if”语句? 你怎么做呢? 更多信息:这是一个带有nHibernate后
3回复

数据提供者或工厂

我经常对设计术语provider和factory感到困惑。 下面是我根据提供的名称选择不同数据库上下文的代码。 我在这里使用了工厂模式,因此我将其命名为DataContextFactory 。 这种方法是否正确? 或者我需要将其更改为DataContextProvider吗? 这意味着
3回复

静态属性可以在C#中返回对象/类的新实例吗?

我正在ASP.NET MVC 4中构建应用程序。我正在创建一个类(类似于Factory类型),该类将返回在BAL层中创建的服务类的实例。 我想在该类中声明静态属性,并且它们应该返回所请求服务类的实例。 我的问题是,静态属性是否可能会返回新类的实例,因为将为静态属性分配一个将在整个应用程序中
2回复

如何在C#中实现工厂设计模式

我正在尝试在我的应用程序中实现Factory pattern 。 参考这些链接,我正在尝试实施但卡在一个地方并且不确定如何继续。 如何更新此类/方法以改进代码指标 http://www.dofactory.com/net/factory-method-design-pattern 如何实现
3回复

多事件类型的单事件总线

我设置了一个事件总线,它只是为所有事件类型传递一个字符串。 这很好但现在我想为每种事件类型设置不同的事件参数。 我没有看到一种方法来保持所有具有不同事件参数的订阅者集合。 我可以为事件参数使用基类型,但是事件处理程序被强制使用基类型,订阅者必须将事件参数强制转换为具体类型(我不想要)。
2回复

如何从服务类方法返回验证错误?

您能否举一个示例,说明如何从Web应用程序中使用的服务类返回验证错误。 您如何看待以下这种方法? 用法样本:
4回复

数据访问层到业务对象的最佳“模式”

我正试图找出最干净的方法来做到这一点。 目前我有一个客户对象: 然后我的Email对象也很基本。 DataAccessLayer当前连接到数据库,并使用SqlDataReader迭代结果集并创建新的Email对象,并将它们添加到完成时返回的List。 那么我在哪里以及如何改进呢?
1回复

对象或值作为我的服务/数据层的参数

我将此ASP.NET应用程序设计为3层系统。 服务层,数据层和用户界面。 我还在正确映射到我的数据模式的服务层中使用POCOS。 我的数据层遵循存储库模式。 我的问题是:在服务层/数据层中,我应该将域实体用作方法的参数,还是应该将所有属性展平。 最佳做法是什么: 这个: 要么