2016-10-26 63 views
0

我正在用Microsoft.Practices.Unity進行一些依賴注入。從Unity容器中檢索注入成員

對於一些類,我使用的注射工廠是這樣的:

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

在我的代碼之後,我希望能夠找出是否我已經使用或不打針工廠給定的接口。

我看到我可以在container.Registrations中獲得註冊,但這些對象不會給我注入成員。

獲得它們的一種可能的方法是在我的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; 
    } 
} 

還是我失去了一些東西?