2016-08-26 1 views
2

결과가 Func<> 인 결과로 처리하려고합니다. 그러나 나는 그것을하는 방법을 찾지 못합니다.DryIoc 함수로 해결

예를 들어 여기에 변수 (함수 인수) lazyInt (어떤 종류의 계산을 오래 실행 한 결과 일 수 있음)과 가능한 결과가 나중에 필요하기 전에 필요하지 않습니다.

 private Demo(Container c, Func<int> lazyInt) : base(c) 
     { 
      _container = c; 
      c.Register<int>(made: Made.Of(/*???*/)); 
     } 

나는 등 ServiceInfo.Of를 사용하여 비트를 시도했지만 당분간없이 성공. 어떻게 할 수 있습니까?

+1

컨테이너가 필요할 수 있습니다. RegisterDelegate (_ => lazyInt()); – dadhi

+0

나는 거기에 대안이있을 때마다 RegisterDelegate가 권장되지 않기 때문에 선호되는 대안이있을 수 있습니다. –

+1

이미 미리 만든 대리자 (lazyInt)가있는 경우에는 사용할 방법이 없습니다. 대리자를 표현식 트리로 쓸 수 있다면 Made.Of가 더 좋으므로 트리를 파싱하고 분석 할 수 있습니다. – dadhi

답변

2

은 이미 생성 된 런타임 대표와 함께 작동하도록 RegisterDelegate 대신 Made.Of의를 사용해야합니다 :

var c = new Container(); 

Func<int> lazyInt =() => 42; 
c.RegisterDelegate(_ => lazyInt()); 

var shouldBe42 = c.Resolve<int>(); 

Made.Of는 메소드 호출 또는 서비스 개발의 속성 액세스 expression를 제공 할 수있을 때 더 좋습니다. DryIoc은 진단을 위해 제공된 표현식을 분석하여 결과로 나온 공장 위임에 직접 적용 할 수 있습니다. 델리게이트 객체를 이미 가지고 있기 때문에 Made.Of은 당신에게 아무런 도움이되지 않습니다.