我需要建立实例名称以在运行时根据外部条件进行解析。
我可以使用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