2011년 11월 12일 토요일

Castle.Windsor 3 에서 Fluent Registration API 추가 기능

이제 얼마 안 있으면 Castle.Windsor 3 가 정식으로 Release 됩니다. 아직까지는 2.5.4 버전을 쓰고 있습니다만, 제가 뭐 엄청 잘 쓰는 게 아니므로, 크게 불만은 없습니다.

원문 : What's new in Windsor 3

요번에 Fluent Registration API 를 공부하면서, 좀 아쉬웠던게, 코드상으로 작업하면서, 환경설정 정보와 연동될 수 있다면, 웹 Application 에서는 아주 유용하겠다 생각을 했는데, 우연히 Castle.Windsor 3 의 새로운 기능으로 추가가 되는 군요.

Dependency class 라고

Container.Register(
   Component.For<ClassWithArguments>()
      .DependsOn(
         Dependency.OnAppSettingsValue("arg1"),
         Dependency.OnAppSettingsValue("arg2", "number"))
);
 
var instance = Container.Resolve<ClassWithArguments>();

라고, AppSettings 에 있는 정보를 Component의 속성 값으로 설정할 수 있는 기능이죠. 물론, 지금도 수동으로 만들 수 있지만, 기본으로 제공되면 더욱 좋다는 얘기입니다.

또 한가지가 모든 IWindsorInstaller 를 모든 Assembly에서 찾아서 인스톨하는 기능입니다.

container.Install(FromAssembly.InThisApplication())

보시다시피, 이 응용 프로그램과 참조하는 모든 어셈블리에 있는 모든 IWindsorInstaller 를 구현한 Installer 로부터 Install 을 수행하는 것입니다. 중복되는 것을 방지해주는 기능이 있으면 참 좋겠지만, 그건 Component 등록 시에 Unless 나 If 등 조건 등록을 사용하면 될 듯 하고, 관련된 Installer 찾아서 등록해주는 것도 일인데, 참 편리하죠.

마지막으로 OnCreate는 있는데, 정리하는 OnDestroy가 없었는데, 이번에 지원되는 군요.

container.Register(Component.For<MyClass>()
   .LifestyleTransient()
   .OnDestroy(myInstance => myInstance.ByeBye())
);

컴포넌트가 컨테이너로부터 해제될 때 발생합니다… 컴포넌트 자체에서 뭔가 할 일도 있을테고, Container 도 컴포넌트의 Lifecycle에 대한 이벤트를 제공하지만, 특정 컴포넌트에 대해, 외부에서 뭔가 지정할 수 있다는 점은 큰 장점이지요.

다른 다양한 기능들이 추가되었지만, 위의 3가지 기능이 참 쓸만 한 것 같습니다.

2011년 11월 3일 목요일

Castle.Windsor Fluent Registration API 소감

제목에 있듯이, 오늘 Castle.Windsor의 Fluent 방식의 Component 등록과 관련된 내용을 읽어보고, .NET 과 Silverlight 에 적용해 봤습니다.

물론 잘 됩니다.^^

그리고 제가 그 동안 사용하던 API 보다 훨씬 편한 방법도 많이 나왔고, Intercepter 등록한다던지, IWindsorInstaller를 이용하여 한방에 등록이 가능하다는 게 상당한 장점이 될 것 같습니다.

문제는 이러한 방식이 Silverlight에서는 선택의 여지가 없지만, .NET 기반에서는 아직도 xml 기반 설정파일이 대세라는 점이고, 이 부분은 컴파일 없이도, 환경을 변경시켜, 컴포넌트의 구조를 변경시킬 수 있는 장점이 있습니다.

기존 Xml  방식과 Fluent 방식에 대해 비교해 보면…

기존 Xml 파일 방식
  • 환경설정 파일의 일부분으로 text 파일로 표현하여, 수정 시 컴파일이 필요 없습니다.
  • 다른 IoC 라이브러리들도 비슷한 환경설정 파일을 제공합니다.
  • 새로운 API 를 배울 필요가 없습니다.^^
Fluent API 방식
  • API 방식이므로, 컴파일 시에 설정 중의 수형에 대한 부분의 검증은 이루어집니다. (xml 에서는 돌려봐야 알죠)
  • 한번에 많은 컴포넌트를 등록할 수 있습니다. (또한 Filterling 을 통해 선택적으로 등록할 수도 있습니다)
  • Conditional Compile 을 통해 선택적으로 등록 코드를 실행할 수 있습니다. (.NET, Silverlight 별로 각각 다른 것을 등록)
  • 동적 등록이 가능

자, 이 글을 보시고, 각자 판단할 것이지만, NHibernate 의 Hbm 과 FluentNHibernate 의 Mapping API  의 비교와 유사하다고 볼 수 있습니다. 그런 면에서 Fluent API 방식에 손을 들어주고 싶습니다.


단 하나 마음에 걸리는 것이 컴파일을 다시 해야 한다는 점입니다.
뭐 이 부분은 Option 으로 처리할 수 있지 않을까 생각해봅니다.

또 한가지 방식은 IWindsorInstaller 로 묶음으로 등록기를 만들고,  XML 환경설정 파일에서 <installer /> 를 이용하여, 등록하고, 변경하는 것입니다. 물론 이 방법도 Installer 를 어떻게 나누냐에 따라 말이 많아지겠죠.

2011년 11월 2일 수요일

Castle.Windsor에서 Fluent Registration 사용하기

Castle.Windsor 하면, xml 형식의 configuration 파일만 주로 사용하는 제게 Fluent Registration API 는 아주 가끔…
  1. 특정 인터페이스의 모든 구현 클래스 등록하기
  2. 사용자 요청에 의해 동적으로 등록하기 (사용 빈도가 낮음)
을 사용하고 있었습니다.
요즘 Silverlight 를 하는 관계로 Castle.Windsor 를 Silverlight 에 사용하기 위해 코드를 작성하는 중에 엥? Silverlight 가 System.Xml Namespace의 클래스들을 제공하지 않아, Castle.Windsor Configuration 중에 Xml로 표현한 것을 파싱하는 XmlInterpreter 를 지원하지 않는다는 것을 알았습니다.
헐~ Silverllight 에서 System.Xml 을 지원하던가, Castle.Windsor에서 System.Xml.Linq 로 변경하던가 해야 할 듯 한데… .NET 2.0 을 생각한다면 System.Xml 을 버릴 수도 없고 참… Microsoft 사가 좀 더 호환성에 신경 썼더라면 하는 생각입니다… 생각 같아서는 #if SILVERLIGHT … #endif 로 구현할 수도 있겠지만, 글쎄요… 어떻게 할지…
자 지금까지는 기존 사용하던 xml 형식의 Component 정의에 대한 얘기라면, 지금부터는 Fluent API 를 이용하여, 컴포넌트를 등록하는 방법에 대한 정보를 보겠습니다.
  1. Fluent Registration API
  2. Registrering components one-by-one
  3. Conditional component registration
  4. Registrering components by conventions
  5. Registering Interceptors and ProxyOptions
  6. Fluent Registration API Extensions
  7. Windsor Installers
  8. XML configuration reference
Fluent API 로 Component 를 등록하는 방식은 아주 간단한 경우만 해봐서리, 저도 고급 방식에 대해서는 공부를 해야 했는데, 그 동안은 자로가 없어서 (핑계지만…) 못했었습니다… 이번에 Castle.Windsor 위키 사이트에 많은 내용이 올라와 있네요…
Xml configuration 과 비교될 수 있으면 비교한 예를 추가해 줬다면, 쉽게 이해가 될 부분도 있을 텐데…

결론은 Silverlight 에서는 Fluent Registration API 를 이용해라 입니다.^^ 앞으로는 .NET 에서도 죽~~
xml configuration 파일이 운영상에서는 장점이 더 많다고 생각하긴 하는데… 좀 더 생각해봐야 할 듯 하네요.

2011년 11월 1일 화요일

HTML5 오픈 레퍼런스

클리어보스 HTML5 그룹에서, 엄청난 노력을 들여, HTML5 오픈 레퍼런스 베타를 공개한다고 합니다. 
새로운 개념과 기능이 왕창 들어간 HTML5 에 대해 맨땅에 헤딩하지 말고, 이 사이트보고, 많은 참고하시면 되겠습니다.

저야 직접적인 관련이 없지만, 많은 분들에게 도움이 될 것 같아 소개드립니다.
그리고 앞으로도 많은 분들이 개발환경에 믿거름이 되는 일을 하셨으면 합니다… 근데 난 왜 못하지? 에구…