我需要根据外部条件建立要在运行时解析的实例的名称。
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));
答案 0 :(得分:0)
目前还不完全清楚你想用什么作为驱动数据来解决哪个实例 - 正如史蒂文所说,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