Как загрузить веб-элементы управления с типом интерфейса - PullRequest
1 голос
/ 17 июля 2009

У меня есть пользовательский веб-элемент управления, который вызывает некоторые методы интерфейса. Четыре различных класса используют этот интерфейс.

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

В init или load я настраиваю элементы управления следующим образом (где wuc * - идентификатор элемента управления, а 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 и способ вызова нового экземпляра ...?

1 Ответ

1 голос
/ 17 июля 2009

Я бы выбрал решение «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()));
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...