从组件编写器使用本地化服务GetAllLanguages,错误的DI?

问题描述 投票:0回答:1

我有一个如下界面,如果它不存在,我用它来添加一个特定的语言:

public interface IGetLanguagesService
    {
        void GetLanguages(ILocalizationService localization);
    }


    public class LanguageService : IGetLanguagesService
    {
        ILocalizationService _localizationService;
        public void GetLanguages(ILocalizationService localization)
        {
            _localizationService = localization;
            var currentLanguages = _localizationService.GetAllLanguages();
            bool exists = false;
            foreach (var currentLan in currentLanguages)
            {
                if (currentLan.IsoCode == "es-ES")
                {
                    exists = true;
                }
            }
            if (!exists)
            {
                AddLanguage(_localizationService);
            }
        }

        public void AddLanguage(ILocalizationService localization)
        {
            var languageSE = new Language("es-ES") { CultureName = "es-ES", IsMandatory = true };
            localization.Save(languageSE);
        }
    }

我想在启动时使用它,所以创建了一个组件编写器,在Initialize()上我想调用CallGetLanguages()但是我不完全确定在Initialize()中应该是什么,我想我的DI可能是错的?

   public class LanguagesComposer : ComponentComposer<LanguagesComponent>
        {
            public void Compose(Composition composition)
            {
                composition.Register<IGetLanguagesService>(Lifetime.Singleton);
                composition.Register<ILocalizationService>(Lifetime.Singleton);

                composition.Components().Append<LanguagesComponent>();
            }
        }

        public class LanguagesComponent : IComponent
        {
            public void Initialize()
            {
               ???????
            }

            public void Terminate()
            {
                throw new NotImplementedException();
            }

            IGetLanguagesService _getLanguagesService;
            ILocalizationService _localization;
            public void CallGetLanguages(IGetLanguagesService getLanguages, ILocalizationService localization)
            {
                _getLanguagesService = getLanguages;
                _localization = localization;
                _getLanguagesService.GetLanguages(localization);
            }


}
c# dependency-injection umbraco
1个回答
2
投票

您已将ILocalizationService localization传递给LanguageService两次,将其传递给构造函数并使用构造函数注入。与LanguagesComponent相同,将依赖关系传递给构造函数而不是方法

© www.soinside.com 2019 - 2024. All rights reserved.