如何自定义Unity如何解析实例?

时间:2014-02-19 03:09:01

标签: c# unity-container

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

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));

1 个答案:

答案 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