문제
인터페이스가 있습니다.
IRepository<T> where T : IEntity
Im은 기존 데이터를 반환하는 가짜 저장소 구현을 사용하여 내 UI IM을 두드리는 동안.
그들은 다음과 같이 보입니다.
public class FakeClientRepository : IRepository<Client>
지금은 이것을하고 있습니다.
ForRequestedType<IRepository<Client>>()
.TheDefaultIsConcreteType<FakeRepositories.FakeClientRepository>();
그러나 내 모든 균열에 대해 많은 시간이 있습니다. 스캔을 사용하여 각각의 Irepository에 대한 모든 가짜 리포지토리를 자동으로 등록 할 수 있습니까?
편집 : 이것은 내가 얻은 한 멀리 있지만 요청 된 유형이 등록되지 않는다는 오류가 발생합니다.
Scan(x =>
{
x.TheCallingAssembly();
x.IncludeNamespaceContainingType<FakeRepositories.FakeClientRepository>();
x.AddAllTypesOf(typeof(IRepository<>));
x.WithDefaultConventions();
});
감사
앤드류
해결책
더 쉬운 방법이 있습니다. 자세한 내용은이 블로그 게시물을 참조하십시오. Advanced StructureMap : 구현을 열린 일반 유형에 연결합니다
public class HandlerRegistry : Registry
{
public HandlerRegistry()
{
Scan(cfg =>
{
cfg.TheCallingAssembly();
cfg.IncludeNamespaceContainingType<FakeRepositories.FakeClientRepository>();
cfg.ConnectImplementationsToTypesClosing(typeof(IRepository<>));
});
}
}
이렇게하면 자신의 것을 만들지 않아도됩니다. ITypeScanner
또는 컨벤션.
다른 팁
감사 크리스, 그것이 바로 내가 필요한 것입니다. 명확성을 위해, 그녀는 내가 당신의 링크에서 한 일을합니다.
Scan(x =>
{
x.TheCallingAssembly();
x.IncludeNamespaceContainingType<FakeRepositories.FakeClientRepository>();
x.With<FakeRepositoryScanner>();
});
private class FakeRepositoryScanner : ITypeScanner
{
public void Process(Type type, PluginGraph graph)
{
Type interfaceType = type.FindInterfaceThatCloses(typeof(IRepository<>));
if (interfaceType != null)
{
graph.AddType(interfaceType, type);
}
}
}
StructureMap 사용자 그룹 의이 토론을 살펴보십시오. http://groups.google.com/group/structuremap-users/browse_thread/thread/649f5324c570347d
제휴하지 않습니다 StackOverflow