DoconutOptions

Doconut 서비스 구성

DoconutOptions (namespace Doconut) 은 전체 SDK에 대한 단일 구성 객체입니다. 한 번만 AddDoconut() 안에서 구성하고, 싱글톤으로 등록됩니다.

csharp
builder.Services.AddDoconut(options =>
{
    options.LicensePath     = "Doconut.Viewer.lic";
    options.UnsafeMode      = false;
    options.ShowDoconutInfo = false;
    options.AddPlugin<Doconut.Plugins.Dicom.DicomPlugin>();
});

Properties

TypePropertyDefaultDescription
boolShowDoconutInfofalsetrue 일 때, 토큰이 없는 미들웨어 요청은 404 대신 버전 배너(Doconut <version> is running on <host>)를 반환합니다. 스모크 체크에 유용하며, 프로덕션에서는 false 를 그대로 두세요.
boolUnsafeModefalsetrue 일 때, 페이지 요청 시 ASP.NET 세션 보안 검사를 건너뜁니다. 프로덕션에서는 false 를 그대로 두세요 (Core Concepts → Sessions & Security 참조).
stringMiddlewarePath"/doconut"페이지-이미지 엔드포인트의 조정 값입니다. 검증은 되지만 파이프라인 분기를 마운트하지 않으며, 실제 UseDoconut() 매핑 및 클라이언트 BasePath 와 일치하도록 유지하세요.
stringResourcesPath"/doconut-res"임베드된 JS/CSS/이미지/폰트 리소스의 URL 경로 접두사입니다.
stringLicensePath""라이선스 파일 경로입니다. 비어 있으면 → 다음 라이선스 소스로, 자동 발견; 찾지 못하면 → 기능이 없는 워터마크 평가 상태가 됩니다.
stringLicenseContent""원시 XML 라이선스 내용(데이터베이스, 환경 변수, 시크릿 매니저). LicensePath 보다 우선합니다.
Stream?LicenseStreamnull시작 시 한 번 읽는 스트림 형태의 라이선스. 다른 두 소스보다 우선합니다.
boolResetLicensefalse예약된 호환성 플래그입니다. 현재 .NET 8 구현에서는 사용되지 않으며, 라이선스를 교체한 후 애플리케이션을 재시작하세요.
DoconutPluginRegistryPluginRegistry—플러그인 기여를 수집하는 읽기 전용 레지스트리이며, 뷰어 팩토리에서 사용됩니다. AddPlugin<T>() 로 채우세요.

라이선스 우선순위(서비스 등록 시 적용): LicenseStream → LicenseContent → LicensePath → 자동 발견 (Getting Started → License Setup 참조).

Methods

AddPlugin<TPlugin>()

text
DoconutOptions AddPlugin<TPlugin>() where TPlugin : IDoconutPlugin, new()

이 메서드는 출시된 옵트인 Converter 및 DICOM 패키지에 사용합니다. Annotation 및 일반 Search는 내장된 라이선스 기능이며 AddPlugin<TPlugin>() 를 사용하지 않습니다.

첫 번째 파티 플러그인(Converter, DICOM)을 등록합니다. Fluent — 옵션 인스턴스를 반환합니다. AddDoconut() 는 라이선스 누락, 레거시 TRIAL 파일, 또는 플러그인 기능을 부여하지 않는 유료 라이선스에 대해 InvalidOperationException 를 발생시킵니다. 임시/데모 등록은 만료 후에도 유지되며 런타임 게이트의 적용을 받습니다 (Core Concepts → Plugin System 참조).

옵트인 Converter 위젯은 AddConverterWidget() 로 활성화되며 읽기 전용 ConverterWidget 속성을 통해 노출됩니다; 해당 옵션은 Converter Plugin 페이지(Plugins → Converter Plugin)에서 문서화되어 있습니다.

RegisterViewer(extension, factory, defaultConfig?)

text
DoconutOptions RegisterViewer(
    string extension,                    // ".myext" — 선행 점은 선택 사항
    Func<IFormatViewer> factory,
    Func<BaseConfig>? defaultConfig = null)

파일 확장자에 대해 사용자 지정 뷰어를 등록합니다. 사용자 지정 뷰어는 내장 및 플러그인 뷰어보다 우선하며 라이선스 제한을 받지 않습니다. defaultConfig 가 생략되고 문서가 명시적 구성 없이 열리면 ImageConfig 가 사용됩니다.

빈 확장자에 대해서는 ArgumentException (Extension must be a non-empty file extension.) 를, null 팩토리에 대해서는 ArgumentNullException 를 발생시킵니다.

Startup validation

AddDoconut() 은 옵션을 빠르게 실패하도록 검증하여, 잘못된 구성은 요청 시 혼란스러운 404 대신 시작 시 명확한 예외로 표시됩니다:

text
DoconutOptions.MiddlewarePath must be a non-empty path starting with '/'.
DoconutOptions.ResourcesPath must be a non-empty path starting with '/'.
DoconutOptions.MiddlewarePath and ResourcesPath must be different paths.

Common configurations

csharp
// Production: 명시적 라이선스, 모든 것이 잠김 (모든 보안 기본값)
builder.Services.AddDoconut(options =>
{
    options.LicenseContent = builder.Configuration["Doconut:License"] ?? "";
});

// 사용자 정의 경로 (예: 라우트 충돌을 피하기 위해)
builder.Services.AddDoconut(options =>
{
    options.MiddlewarePath = "/docs-engine";
    options.ResourcesPath  = "/docs-assets";
});

ResourcesPath 을 변경할 때, 클라이언트 위젯의 ResPath 를 동기화하세요 (ViewerConfig 참조).

MiddlewarePath 은 자동 ASP.NET Core 라우트 매퍼가 아닙니다. Doconut 이 사용자 지정 접두사 아래에서만 응답하도록 하려면, 해당 분기에 UseDoconut() 를 마운트하고(예: app.Map("/docs-engine", branch => branch.UseDoconut()) 사용) 클라이언트 BasePath 를 동일한 URL 로 설정하세요.

이 페이지가 도움이 되었나요?