문제

인터페이스가 있습니다.

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

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top