0

가의 기본 프로젝트-설정 다음 가정 해 봅시다 :MVC DisplayNameAttribute 및 Ninject : 가능합니까?

- Core 
-- Attributes 
--- CustomDisplayNameAttribute : DisplayNameAttribute 
- UI 

UI는 MVC 웹 인터페이스를 나타내는 핵심은 CustomDisplayNameAttribute 같은 자기 기록 속성을 포함한 모든 도메인 비즈니스 오브젝트를 구현합니다. 이 속성은 언어 분석기와 같은 추가 종속성을 포함합니다. 대체 주문을 처리합니다. Hibernate 세션은 또 다른 가능한 종속성이 될 수 있습니다.

이전 프로젝트에서는 이러한 특성이 글로벌 요청을 통해 리졸버를 확보했습니다. 이것은 IMO 추한이며 다르게 처리해야합니다. 또한 Core는 HttpContext없이 유지해야합니다. 요청 당 언어 확인자가 필요하므로 HttpContext Items Collection으로 끝날 수 있습니다.

지금은 Ninject의 초보자입니다. CustomDisplayNameAttribute과 같은 종속성을 얻으려면 올바른 도구인지 확실하지 않습니다.

가이 같은 것입니다 : 더 HttpContext (예 : 시험이없는 경우 속성이 생성됩니다

  • 경우, HttpContext 항목 컬렉션
  • 에서 언어 해결과 추가 언어 확인자 속성을 채 웁니다 , 석영 작업 등), 어딘가에서 그것을 얻을. 모든 입력

    에 대한

들으

편집 : 샘플 코드

namespace Core.Attributes 
{ 
    public class CustomDisplayNameAttribute : DisplayNameAttribute 
    { 

     private string textCode; 

     /// <param name="textCode">According to this Text-Code, we will load 
     /// and resolve the text.</param> 
     public DeimosDisplayNameAttribute(string textCode) 
     { 
      this.textCode = textCode; 
     } 

     /// <summary> 
     /// Load and resolve Text according to Text-Code 
     /// </summary> 
     public override string DisplayName 
     { 
      get 
      { 
       // Load - Ooops: First global access 
       // --> How can it be injected with IoC? 
       TextbausteinRepository repo = Root.GetTextBausteinRepository(); 
       var textItem = repo.GetText(textCode); 
       // Resolve - Ooops: Second global access 
       // --> How can it be injected with IoC? 
       TextResolver resolver = Root.GetTextResolver(); 
       return resolver.resolve(textItem); 
      } 
     } 
    } 

} 

편집 2 : 그 맥락에서, 글로벌 액세스 주위에 방법처럼이없는 것 같다 레지스트리 패턴 또는 이와 유사한 것. UI는 거기에 필요한 데이터를 등록하고 속성은 거기에서 액세스 할 것입니다. 우리는 이것을 ThreadLocal<T>에 저장하는 것에 대해 생각하기 시작했으나 수명주기 동안 스레드 스와핑의 가능성이 있기 때문에 실제로 저장되지는 ​​않습니다. 따라서 레지스트리 레이어에 HttpContext을 저장하는 방법은 없습니다. 이 주제에 대한 자세한 정보는 [Cup (Of T)] [1]을 참조하십시오.

+0

내가하려는 일은 분명하지 않습니다. 몇 가지 예제 소스 코드를 제공해 주시겠습니까? –

+0

'CustomDisplayNameAttribute'의 코드 샘플을 추가했습니다. 이는 전역 요청없이 어떻게 든 해결하고자하는 종속성을 보여 주어야합니다. – sl3dg3

+0

그래서 당신이 말하는 것은 Dependency Injection과 속성을 사용하고자한다는 것입니다. –

답변

0

데이터 속성이 필터처럼 런타임에 전달되지 않기 때문에 이것이 가능하지 않다고 생각합니다. 따라서 창조물을 가로 채고 찾고있는 것을 주입 할 수있는 곳이 없습니다.

+0

나는 레지스트리 패턴으로 작업 할 것입니다. – sl3dg3

관련 문제