usercontrol属性中的通用接口

时间:2015-10-15 20:39:12

标签: asp.net .net vb.net generics

我整天都在撞墙,开始认为这是不可能的,所以你们是我最后的希望!

我有一个用户控件,用于创建消息,然后允许通过短信发送或发送消息,具体取决于用户控件所在的aspx页面。我在用户控件中有相当多的逻辑,并且发现我做了很多这样的事情:

Public Interface IContactMessager(Of T)
    Sub Delete(ref As String)

    Function GetAll() As List(Of T)

    Function GetByRef(ref As String) As T

    Function MessageExists(ref As String) As Boolean

    ReadOnly Property RefField() As String

    Sub Save(ref As String, message As String)

    Sub SendMessage(contact As String, message As String)

    Sub Update(ref As String, message As String)
End Interface

很多逻辑是相似的,因此有很多重复。我最终将电子邮件和短信的类似逻辑抽象为界面:

Dim handler As IContactMessager(Of Email)=if(type="sms",SMSHandler,EmailHandler)

我现在有一个继承自此界面的短信和电子邮件管理器类。这应该允许我在用户控件

中执行类似下面的操作
handler.logic

然后我可以Public ReadOnly Property ContactMessagerHandler() As IContactMessager(Of T) Get Return If(MessageType.ToLower() = "email", New EmailContactMessager(), New SMSContactMessager()) End Get End Property 而不是ifs,它将运行正确的逻辑。 现在是我的问题,因为接口是通用的。理想情况下,我喜欢这样做:

(Of T)

但是我不能拥有{{1}},因为很明显它不知道是什么类型的。我需要以某种方式动态设置这种类型,但我已经没有想法了。

我玩过的一些东西:

  • 试图查看我是否可以从调用的aspx页面传递对象
  • 使接口成为基页,然后使调用的aspx页继承自基页,然后尝试从usercontrols parent获取类型,但没有成功
  • 尝试根据从调用aspx页面传递的文本设置接口类型的方法

这些都不起作用。还有其他人有其他想法吗?希望这是有道理的,如果没有让我知道我是否能以某种方式改善这个问题

0 个答案:

没有答案