从Unity容器中检索注入成员

时间:2016-10-26 08:59:33

标签: c# dependency-injection unity-container

我正在使用Microsoft.Practices.Unity进行一些依赖注入。

对于某些课程,我正在使用这样的注射工厂:

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

稍后在我的代码中,我希望能够找出我是否使用过某个接口的注入工厂。

我看到我可以在container.Registrations中获得注册,但是这些对象不会给我注射成员。

获得它们的一种可能方法是在我的IUnityContainer周围实现一个包装器,它记录注入成员。

但也许有更好的方法可以直接利用Unity API?有没有办法直接从统一容器中获取这些注射成员?

1 个答案:

答案 0 :(得分: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;
    }
}

还是我错过了什么?