【问题标题】:How to load web user controls with interface type如何加载具有界面类型的 Web 用户控件
【发布时间】:2009-07-17 05:21:57
【问题描述】:

我有一个 Web 用户控件,它调用接口的一些方法。四个不同的类使用这个接口。

public interface IMultiTextProvider
{
    bool Insert(string text, Guid campaignId);
    IEnumerable<IMultiTextItem> GetItems(Guid campaignId);
}

在初始化或加载中,我正在设置这样的控件(其中 wuc* 是控件 ID,Provider 是实现接口的类的属性):

    private void SetMulitTextClassTypes()
    {
        wucMultiTextHandsetOrPlan.Provider = new HandsetOrPlanProvider();
        wucMultiTextCallToAction.Provider = new CallToActionProvider();
        wucMultiTextBonuses.Provider = new BonusProvider();
        wucMultiTextRequirements.Provider = new RequirementProvider();
    }

问题是,我可以在控件中以声明方式执行此操作吗?
我正在尝试使用对象数据源,但属性实例化太晚了。

<CSControl:MultiTextUpdate ID="wucMultiTextBonuses" ControlTitle="Bonuses" runat="server" Provider="what goes here???" CampaignId="<%# CampaignId %>" />

在编写一个控件以在界面中运行函数时,是否有更好的模型可以使用? 也许我需要 ProviderType 而不是 Provider 以及调用新实例的方法...?

【问题讨论】:

    标签: c# asp.net user-controls interface


    【解决方案1】:

    我会选择“ProviderType”解决方案,将其用作控件的属性来获取要实例化的类型。这是一个关于如何从类型名称开始创建对象的快速示例(使用控制台应用程序)。

    namespace TypeTest{
    
        public interface IMultiTextProvider {
            bool Insert(string text, Guid campaignId);
        }
    
        public class BonusProvider : IMultiTextProvider {
            public bool Insert(string text, Guid campaignId) {
                return true;
            }
        }
    
        class Program {
            static void Main(string[] args) {
    
                string typeName = "TypeTest.BonusProvider";
                Type providerType = Type.GetType(typeName);
                IMultiTextProvider provider = Activator.CreateInstance(providerType)
                    as IMultiTextProvider;
                if (null == provider) {
                    throw new ArgumentException("ProviderType does not implement IMultiTextProvider interface");
                }
                Console.WriteLine(provider.Insert("test",new Guid()));
            }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-09
      • 1970-01-01
      • 1970-01-01
      • 2018-01-05
      • 2023-03-12
      • 1970-01-01
      • 2010-09-08
      相关资源
      最近更新 更多