>

직장 내부에서 사용할 동적 CDN을 구축 중입니다. 우리는 비즈니스에서 사용했던 수많은 웹 응용 프로그램을 가지고 있으며 모든 JS 라이브러리 (Bootstrap, Jquery 등)가 작동하도록 CDN을 설정하고 있습니다. 프로젝트 생성을 돕기 위해 라이브러리 테이블과 라이브러리 요구 사항 테이블이있는 데이터베이스를 만들었습니다 (즉, Bootstrap에는 Jquery가 필요합니다). 요구 사항에 대한 데이터베이스의 데이터를 사용하여 webAPI는 _Layout.cshtml 페이지에서 사용하기 위해 스크립트 태그 및 CSS 링크 태그가 포함 된 List를 리턴합니다.

해당 데이터베이스 테이블은 tblLibrary&tblLibraryRequirements입니다

tblLibraryRequirements 테이블은 다음 열로 구성됩니다. -아이디 -[도서관 ID] -[ID 필요]

필요한 tblLibrary 객체를 관련된 모든 라이브러리의 마스터 목록에 추가하기 위해 foreach 루프를 중첩하여 3 단계로 진행되는 작업 모델이 있습니다. 중복은 .Distinct ()

를 통해 제거됩니다.
       public ActionResult<List<string>> GetSciptTags_config(int ConfigID)
        {
            List<TblLibrary> LibraryRecsToScript = new List<TblLibrary>();
            // Get a list of libraries in the project config
            List<TblProjectConfigLibraries> configLibraries = db.TblProjectConfigLibraries.Where(s => s.ConfigurationId == ConfigID).ToList();
            foreach (TblProjectConfigLibraries configLibRec in configLibraries)
            {
                // get the tblLibrary record for the supplied ID
                TblLibrary libRec = db.TblLibrary.FirstOrDefault(s => s.Id == configLibRec.LibraryId);
                // find any requirement libraries
                List<TblLibraryRequirements> requirementRecs = db.TblLibraryRequirements.Where(s => s.LibraryId == configLibRec.LibraryId).ToList();
                foreach (TblLibraryRequirements item in requirementRecs)
                {
                    TblLibrary reqLibRec = db.TblLibrary.FirstOrDefault(s => s.Id == item.RequiresId);
                    // check that the requirement doesnt have requirements
                    List<TblLibraryRequirements> reqs = db.TblLibraryRequirements.Where(s => s.LibraryId == reqLibRec.Id).ToList();
                    foreach (TblLibraryRequirements req in reqs)
                    {
                        TblLibrary reqLibRec2 = db.TblLibrary.FirstOrDefault(s => s.Id == req.RequiresId);
                        LibraryRecsToScript.Add(reqLibRec2);
                    }
                    LibraryRecsToScript.Add(reqLibRec);
                }
                LibraryRecsToScript.Add(libRec);
            }
            // Remove Duplicates
            LibraryRecsToScript = LibraryRecsToScript.Distinct().ToList();
            // Get Scripts
            List<string> scripts = getScriptTags(LibraryRecsToScript);
            return scripts;
        }

위의 첫 3 단계에서 작동하지만 우리가 가지고있는 CSS 라이브러리를 가져 오십시오 .Bootstrap-DatePicker가 필요하면 JQuery로 되돌아 가기를 원합니다.

-즉 library1은 libraray2에 의존하며, library3에 의존하고 library4에 의존하는 등

이 작업을 수행하는 더 좋은 방법이 있어야한다고 확신하지만 코드를 작성하는 데 실패했습니다.

어떤 도움이라도 대단히 감사합니다. 철자, 문법 및 형식 문제에 대한 사과.

  • 답변 # 1

    해결책을 찾았습니다. 그다지 우아하지는 않지만 테스트에서는 효과가있는 것 같습니다.

    이제 초기 ID를 전달하는 함수를 호출하도록 컨트롤러 작업을 업데이트했습니다

    public ActionResult<List<string>> GetSciptTags_config(int ConfigID)
            {
                List<TblLibrary> LibraryRecsToScript = new List<TblLibrary>();
                // Get a list of libraries in the project config
                List<TblProjectConfigLibraries> configLibraries = db.TblProjectConfigLibraries.Where(s => s.ConfigurationId == ConfigID).ToList();
                foreach (TblProjectConfigLibraries configLibRec in configLibraries)
                {
                    LibraryRecsToScript.AddRange(GetLibraryList(configLibRec.LibraryId));
                }
                // Get Scripts
                List<string> scripts = getScriptTags(LibraryRecsToScript);
                return scripts;
            }
    
    

    이렇게하면 tblLibrary 객체가 librarySeen이라는 외부 목록에 추가되고 각 호출에 대해 무한 반복을 중지하기 위해 해당 라이브러리가 librarySeen에 이미 추가되었는지 확인합니다.

    private List<TblLibrary> GetLibraryList(int libraryID)
            {
                List<TblLibrary> retVal = new List<TblLibrary>();
                // master list of records found is a class wide variable so that this routine can be called from within itself
                TblLibrary libRec = db.TblLibrary.FirstOrDefault(s=> s.Id == libraryID);
                librariesSeen.Add(libRec);
                if (retVal.Contains(libRec) == false)
                {
                    List<TblLibraryRequirements> requirementsFound = db.TblLibraryRequirements.Where(s => s.LibraryId == libraryID).ToList();
                    foreach (TblLibraryRequirements req in requirementsFound)
                    {
                        TblLibrary reqLibRecord = db.TblLibrary.FirstOrDefault(s => s.Id == req.RequiresId);
                        if (librariesSeen.Contains(reqLibRecord) == false)
                        {
                            retVal.AddRange(GetLibraryList(reqLibRecord.Id));
                        }
                    }
                    retVal.Add(libRec);
                    // Remove Duplicates
                    retVal = retVal.Distinct().ToList();
                }
                return retVal;
            }
    
    

    이것이 다른 사람에게 도움이되기를 바랍니다 =)

관련 자료

  • 이전 iphone - xcode에서 iOS 앱 아카이브를 생성 할 수 없습니다
  • 다음 ssl - android 저장소 - ssl_certificate_verify_failed 오류