[英]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.