我需要建立实例名称以在运行时根据外部条件进行解析。

我可以使用Unity中的扩展点来执行此操作,还是应该使用工厂?

例如:

container.RegisterType<IStrategy, FooStrategy>("FooStrategy");
container.RegisterType<IStrategy, BarStrategy>("BarStrategy");

var foo = container.Resolve<IStrategy>(); // would like to extend here to select the correct type to resolve.
Assert.IsTrue(foo.GetType() == typeof (FooStrategy));

最佳答案

尚不清楚您要用作实例解析数据的驱动数据-正如史蒂文所说,Unity不能只是猜测。

您可以使用逻辑来按我想的名称来解析,看起来像这样(来自MSDN);

// Create container and register types
IUnityContainer myContainer = new UnityContainer();
myContainer.RegisterType<IMyService, DataService>("Data");
myContainer.RegisterType<IMyService, LoggingService>("Logging");

// Retrieve an instance of each type
IMyService myDataService = myContainer.Resolve<IMyService>("Data");
IMyService myLoggingService = myContainer.Resolve<IMyService>("Logging");


如果您有更复杂的逻辑,则还可以使用自定义解析器。看到这里:http://msdn.microsoft.com/en-us/library/ee250036(v=bts.10).aspx

10-05 23:54