구조지도 - 나는 가장 욕심 많은 생성자를 사용하고 싶지 않습니다!
-
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<>));
제휴하지 않습니다 StackOverflow