IoC:创建Unity扩展以覆盖依赖关系?

时间:2011-12-19 19:24:12

标签: c#-4.0 inversion-of-control unity-container ioc-container

通过使用Microsoft的Unity,我能够在我解析实例的确切时刻覆盖依赖关系,例如:

var valueObjectThatOverridesAnyConfiguration = new object();

var container = new UnityContainer();
container.Resolve<ATypeWithConstructorArguments>(new DependencyOverride(typeof(object), valueObjectThatOverridesAnyPreviousConfiguration);

这将覆盖我的UnityContainer上的任何先前配置,并注入我在DependencyOverride上提供的实例。

有没有办法在Container级别指定它?像扩展或什么?我不想在决定时刻这样做!

谢谢!如果我对你感到困惑,请告诉我,我会提供更多信息。

1 个答案:

答案 0 :(得分:4)

你的意思是this。听起来像你的问题的部分开始在线程的中间。

它允许你这样做

  var container = new UnityContainer();
  container.AddNewExtension<SemanticGroupExtension>();

  container.RegisterGroup<IVehicle, Car>("Car").Use<IWheel, CarWheel>().Use<IEngine, CarEngine>();
  container.RegisterGroup<IVehicle, Motorcycle>("Motorcycle").Use<IWheel, MotorcycleWheel>().Use<IEngine, MotorcycleEngine>();

  var car = container.Resolve<IVehicle>("Car");
  Assert.IsInstanceOfType(car.Wheel, typeof(CarWheel));
  Assert.IsInstanceOfType(car.Engine, typeof(CarEngine));

  var motorcycle = container.Resolve<IVehicle>("Motorcycle");
  Assert.IsInstanceOfType(motorcycle.Wheel, typeof(MotorcycleWheel));
  Assert.IsInstanceOfType(motorcycle.Engine, typeof(MotorcycleEngine));

可以在 TecX.Unity 项目中找到here来源。