2011-02-25 11 views
0

누구나 3 도구를 모두 통합하는 방법에 대한 최신 예제를 알려줄 수 있습니까? ? 나는 몇 가지 예를 발견했으나 그것들은 구식 인 것으로 보인다. 다음은 내가 발견 한 예제입니다.WCF-StructureMap-NHibernate를 함께 사용하려면 어떻게해야합니까?

http://www.lostechies.com/blogs/jimmy_bogard/archive/2008/09/16/integrating-structuremap-and-nhibernate-with-wcf.aspx
http://andreasohlund.net/2009/04/27/unitofwork-in-wcf-using-structuremap/ <는 - 나는 coreycoogan 예제를 연습하기 시작 NHibernate에
http://blog.coreycoogan.com/2010/05/26/structuremap-wcf-nhibernate-part-1/
http://blog.coreycoogan.com/2010/05/27/structuremap-wcf-nhibernate-part-2/

를 해결하지 않습니다,하지만 몇 가지 문제에 달렸다. 그는 의존성이 레지스트리의 생성자에 을 주입하는 StructureMap 레지스트리를 만드는 것을 보여 줍니다. 그러나 그는 그 부분을 하는 방법을 보여주지 않습니다. 나는 StructMap 레지스트리에서 그 예를 본 적이 없다. 내가 본 모든 예제에는 파라미터가없는 contstructor가 있습니다.

가능하면 어떻게 될까요? Bootstrapper 클래스의 ObjectFactory.Initialize 메서드를 호출하여 이라는 기본 규칙으로 스캐너를 호출하고 LookForRegistries 메서드를 호출합니다. 이렇게하면 종속성이 필요한 레지스트리 클래스 인 을 제외한 모든 레지스트리 클래스를 찾습니다. 나는 내가 에 올바르게 배선되어 있지 않거나 불가능하다고 생각할 것이다.

LookForRegistries 방법 만 찾아 ... StructureMap 초기화에 관해서

/// <summary> 
/// A StructureMap registry for telling the container how to resolve an ISession request. 
/// This must be instantiated and added to the SM configuration so it has an instance of the 
/// SessionFactory to use. 
/// </summary> 
public class WcfNHibernateRegistry : Registry 
{ 
    public WcfNHibernateRegistry(ISessionFactory sessionFactory) 
    { 
     For<NHibernate.ISession>() 
      .Use(() => sessionFactory.GetCurrentSession()); 
    } 
} 
+0

실제 문제는 WCF 또는 NHibernate에 함께 할 수 없다, 그러나의 라인을 따라 더 'StructureMap을 config (설정)하는 방법 레지스트리 클래스는 의존성이 삽입 "을 필요로 할 때이다 나에게 나타납니다 , 아니오? –

+0

예, 아니오 이러한 기술을 통합하는 방법에 대한 좋은 예를 찾고 싶습니다. 그래서이 질문에는 실제로 두 부분이 있습니다 : (1) 좋은 예는 어디입니까? (2) 내가 선택한 예에서, 어떻게하면 레지스트리 질문을 해결할 수 있습니까? –

+0

비슷한 것을했는데이 질문에 답할 수있는 샘플을 만들 시간이 없습니다. 더 구체적인 질문으로 나눌 수 있다면 잘 할 수 있습니다. 도와 줄 수있어. –

답변

0

: 여기

은 자신의 게시물의 2 부에있는 레지스트리에 그 코드 예제의 작은 부분 매개 변수가없는 생성자가있는 레지스트리 클래스입니다. 이것은 의미가 있습니다 - StructureMap은 아직 초기화되지 않았고 사용할 준비가되었습니다. 의존성을 주입 할 준비가되지 않았습니다. 레지스트리 클래스에 종속성을 주입하려면 수동으로해야합니다. (만약 다른 방법이 있다면, 나는 그것들을 모르고 있습니다.)

http://structuremap.net/structuremap/RegistryDSL.htm#section2에서 '예제 1'을 따르는 경우 그렇게 할 수 있습니다. 그러나이 예제에서는 결과 컨테이너 인스턴스를 사용한다고 가정합니다. 반드시 ObjectFactory 정적 메소드. (특정 컨테이너 내에서 유형을 등록하는 것이 어떻게 작동하는지 잘 모르겠습니다.)

또는 생성자 매개 변수를 제거 할 수 있습니다. 나는이 일 것으로 예상 :

public class WcfNHibernateRegistry : Registry 
{ 
    public WcfNHibernateRegistry() 
    { 
     For<ISessionFactory>().Singleton().Use(() => { 
      var cfg = new NHibernate.Cfg.Configuration(); 
      cfg.Configure(); 
      return cfg.BuildSessionFactory(); 
     }); 

     For<ISession>().Use(() => { 
      var fac = ObjectFactory.GetInstance<ISessionFactory>(); 
      return fac.GetCurrentSession(); 
     }); 
    } 
} 
관련 문제