我正在使用Microsoft.Practices.Unity进行一些依赖注入。
对于某些课程,我正在使用这样的注射工厂:
container.RegisterType<ICar>(new InjectionFactory(o => {return new Car("Toyota")}));
稍后在我的代码中,我希望能够找出我是否使用过某个接口的注入工厂。
我看到我可以在container.Registrations中获得注册,但是这些对象不会给我注射成员。
获得它们的一种可能方法是在我的IUnityContainer周围实现一个包装器,它记录注入成员。
但也许有更好的方法可以直接利用Unity API?有没有办法直接从统一容器中获取这些注射成员?
答案 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;
}
}
还是我错过了什么?