Ошибка CS0738 Реализация интерфейса - PullRequest
0 голосов
/ 06 декабря 2010

У меня есть следующий интерфейс:

открытый делегат void NotifyOnModulesAvailabilityHandler (Lazy [] modules);

public interface IModulesLoader
{
    event NotifyOnModulesAvailabilityHandler NotifyOnModulesAvailability;

    Lazy<UserControl, IModuleMetadata>[] Modules { get; set; }

    void OnImportsSatisfied();
}

Я пытаюсь реализовать этот интерфейс следующим образом:

public class ModulesLoader : IModulesLoader, IPartImportsSatisfiedNotification
{
    #region Events

    public event NotifyOnModulesAvailabilityHandler NotifyOnModulesAvailability;

    #endregion

    #region Public Contructor

    public ModulesLoader()
    {
        DeploymentCatalogService.Instance.Initialize();

        CompositionInitializer.SatisfyImports(this);

        this.LoadModules();
    }

    #endregion

    #region Properties

    [ImportMany(AllowRecomposition = true)]
    public Lazy<UserControl, IModuleMetadata>[] Modules
    {
        get;
        set;
    }

    #endregion

    #region IPartImportsSatisfiedNotification Members

    public void OnImportsSatisfied()
    {
        var handler = this.NotifyOnModulesAvailability;
        if (handler != null)
        {
            handler(this.Modules);
        }
    }

    #endregion

    #region Private Methods

    private void LoadModules()
    {
        var wc = new WebClient();
        wc.OpenReadCompleted += (s, e) =>
        {
            var streamInfo = e.Result;

            var xElement = XElement.Load(streamInfo);

            var modulesList = from m in xElement.Elements("ModuleInfo")
                              select m;
            if (modulesList.Any())
            {
                foreach (var module in modulesList)
                {
                    var moduleName = module.Attribute("XapFilename").Value;

                    DeploymentCatalogService.Instance.AddXap(moduleName);
                }
            }
        };
        wc.OpenReadAsync(new Uri("ModulesCatalog.xml", UriKind.Relative));
    }

    #endregion

}

Я получаю следующую ошибку:

Ошибка 1 «TunisiaMeeting.Extensibility.Shell.Helpers.Deployment.ModulesLoader» не реализует элемент интерфейса «TunisiaMeeting.MefBase.Interfaces.IModulesLoader.Modules». «TunisiaMeeting.Extensibility.Shell.Helpers.Deployment.ModulesLoader.Modules» не может реализовать «TunisiaMeeting.MefBase.Interfaces.IModulesLoader.Modules», поскольку у него нет соответствующего возвращаемого типа 'System.Lazy``2<System.Windows.Controls.UserControl,TunisiaMeeting.MefBase.Interfaces.IModuleMetadata>[]'. C: \ Imed \ TunisiaMeeting \ TunisiaMeeting.Extensibility.Shell \ Helpers \ Deployment \ ModulesLoader.cs 18 18 TunisiaMeeting.Extensibility.Shell

Я почти уверен, что у меня одинаковый тип возвращаемого значения Lazy<UserControl, IModuleMetadata>[] как в моем классе, так и в интерфейсе для моего свойства.

Любая помощь, пожалуйста?

Спасибо всем

1 Ответ

1 голос
/ 06 декабря 2010

Вы не показали, откуда взялись UserControl и IModuleMetadata ... я предполагаю, что ваш интерфейс ссылается на одну пару типов, тогда как ваша реализация ссылается на другую пару:

  • Убедитесь, что они ссылаются на одни и те же типы в одних и тех же пространствах имен
  • Убедитесь, что у вас есть только одна копия каждого типа (например, что у вас нет одной копии в библиотеке классов, и вы объявили заново)это где-то еще)
...