구조지도 - 나는 가장 욕심 많은 생성자를 사용하고 싶지 않습니다!

StackOverflow https://stackoverflow.com/questions/1073782

  •  21-08-2019
  •  | 
  •  

문제

구조 맵으로 프로젝트에서 NCOMMON NHREPOSITION을 구성하려고합니다. 가장 탐욕스러운 생성자를 선택하지 못하게하려면 어떻게해야합니까?

 public class NHRepository<TEntity> : RepositoryBase<TEntity>
 {

    public NHRepository () {}


    public NHRepository(ISession session)
    {
        _privateSession = session; 
    }

    ...
}

내 구조 맵 구성

ForRequestedType(typeof (IRepository<>))
                .TheDefaultIsConcreteType(typeof(NHRepository<>))

제이크를 건배합니다

도움이 되었습니까?

해결책

당신은 설정할 수 있습니다 [DefaultConstructor] 기본값으로 원하는 생성자의 속성. 귀하의 경우에 설정하십시오 NHRepository() 생성자는 structuremap 초기화의 기본 구성자가됩니다.

업데이트 : 최신 버전의 StructureMap에서 .NET 3.5를 사용하여 SelectConstructor 메소드를 사용하여 지정할 수도 있습니다.

var container = new Container(x =>
{
  x.SelectConstructor<NHRepository>(()=>new NHRepository());
});

마지막으로, 나는 당신이 structuremap의 XML 구성에서 그것을 정의 할 수있을 것이라고 확신하지만, 그것을 사용하지 않았습니다. 당신은 그것에 대해 약간의 검색을 할 수 있습니다. 위의 방법에 대한 자세한 내용은 다음을 참조하십시오. http://structuremap.sourceforge.net/constructorandsetterinjection.htm#section3

다른 팁

Razzie의 경우 +1은 nhrepository가 내 어셈블리에 있으면 작동하기 때문에, 대신 아래와 같은 내 자신의 저장소로 nhrepository를 랩핑하기로 선택했습니다.

public class Repository<T> : NHRepository<T>
{
    [DefaultConstructor]
    public Repository()
    {

    }

    public Repository(ISession session)
    {

    }
}

ForRequestedType(typeof (IRepository<>))
                .TheDefaultIsConcreteType(typeof (Repository<>));
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top