繁体   English   中英

如何使用界面类型加载Web用户控件

[英]How to load web user controls with interface type

我有一个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以及一种调用新实例的方式...?

我将使用“ 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()));
        }
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM