2016-10-26 5 views
0

Microsoft.Practices.Unity에 종속성 주입을하고 있습니다. 일부 클래스의 유니티 컨테이너에서 주사 멤버 검색

는,이 같은 사출 공장을 사용하고 있습니다 :

container.RegisterType<ICar>(new InjectionFactory(o => {return new Car("Toyota")})); 

나중에 내 코드에서, 나는 주어진 인터페이스에 대한 사출 공장을 사용하지 않았거나 여부를 확인 할 수 있어야합니다.

나는 컨테이너에서 등록을 얻을 수 있다는 것을 알았다. 등록.하지만이 물건들은 주사기를주지 않는다.

가능한 방법은 IUnityContainer 주위에 래퍼를 구현하는 것입니다.이 래퍼는 주입 멤버를 기록합니다.

하지만 단결 API를 직접 활용하는 것이 더 좋은 방법일까요? 통일 용기에서 직접 주입하는 방법이 있습니까?

+1

생성자에 삽입하면 안됩니까? –

+1

왜이 기능이 필요한지 설명해 주시겠습니까? –

+0

필자는 의존성 그래프가 '잘 형성됨'즉, 각 매핑 된 유형을 구성 할 수 있는지 자동으로 테스트 할 수 있는지 파악하려고합니다. 타입을 적절히 구성하기 위해서는 주입 팩토리를 사용하여 생성하거나 가장 큰 생성자의 모든 매개 변수를 단일체로 등록해야합니다. – David

답변

0

내 의견에 제안되어 있습니다 (단결되지 않음). 그냥 내 프로젝트에서 복사했습니다.

public void ConfigureServices(IServiceCollection services) 
    { 
     var lgr = LogManager.GetCurrentClassLogger(); 
     var logger = new NlogLogger(lgr); 

     services.AddSingleton<ILogger>(provider => logger); 
     services.AddSingleton<IMachineConfigFactory, MachineConfigFactory>(); 
     services.AddSingleton<IMemoryCacheService, MemoryCacheService>(); 
     services.AddSingleton<IServerManagerService, ServerManagerService>(); 
     services.AddSingleton<ISubscriberServerHubService, SubscriberServerHubService>(); 
     services.AddSingleton<IPurgeService, PurgeService>(); 

     var configuration = GetConfiguration(option); 
     services.AddSingleton(configuration); 

     services.AddOptions(); 
     services.Configure<HostConfig>(configuration.GetSection("HostConfig")); 

     services.AddSingleton<ServerManager>(); 
     services.AddSingleton<CacheManagerService>(); 

     return services; 
    } 

다음 :

public class HealthChecker : IHealthChecker 
{ 
    private readonly HealthCheckerConfig _config; 
    private readonly IAssetProvider _assetProvider; 

    public HealthChecker(IOptions<HealthCheckerConfig> config, IAssetProvider assetProvider) 
    { 
     _config = config.Value; 
     _assetProvider = assetProvider; 
    } 
} 

아니면 내가 뭔가를 놓친 거지?