2

오늘 (Unity를 사용하여) 종속성 삽입을 사용하는 동안 사소한 문제가 발생했습니다. 저장소와 그 저장소에서 지원하는 캐시가 모두 있습니다. 내 소비자 기대했다동일한 인터페이스를 구현하는 캐시와 저장소가있는 DependencyInjection

public interface IStuffRepo { 
    Stuff GetStuff(); 
} 

public class Repo : IStuffRepo { 
    public Stuff GetStuff() { 
    return get_stuff_from_the_database(); // or something 
    } 
} 

public class StuffCache : IStuffRepo { 
    private Stuff _cached;  
    private IStuffRepo _actualRepo;  
    public StuffCache([Dependency] IStuffRepo actualRepo) { _actualRepo = actualRepo; } 
    public Stuff GetStuff() { 
    if (_cached != null) return cached_stuff; 
    _cached = _actualRepo.GetStuff(); return _cached; 
    } 
} 

것은 다음 단지 IStuffRepo를 주입, 내 DI 프레임 워크 및 구성 루트를 구축 처리 할 수 ​​있습니다 :

여기 아주 기본 설명입니다. 소비자에게 캐시와 저장소가 동일하도록이 패턴을 선택했습니다.

이제 모든 것을 구성하기 위해 구성 루트를 설정하는 방법을 알아 내려고합니다.

var cache = new StuffCache(container.Resolve<StuffRepository>()); 
container.RegisterInstance<IStuffRepository>(cache); 

하지만 일반적으로 새로운 보내고 것을 피하려고 건설 및 수명 관리를 할 내 DI 프레임 워크를 사용하는 것을 선호 :이 작업을 수행하는 내가 생각할 수있는 유일한 방법이 될 것입니다.

이것을 "받아 들인"방법입니까? 이 일에 동참하는 어떤 것이 Unity에 있습니까?

답변

1

this MSDN doc에 따르면 유형의 특정 인스턴스에 대한 명명 된 매핑이있는 경우 [종속성] 주석은 사용할 매핑을 지정하기 위해 매개 변수를 사용할 수 있습니다.

+0

대단히 감사합니다. 사용하겠습니다. :) – csauve

관련 문제