C# 如何自定义Unity解析实例的方式?

C# 如何自定义Unity解析实例的方式?,c#,unity-container,C#,Unity Container,我需要根据外部条件建立实例的名称,以便在运行时解析 在统一中是否有一个扩展点,我可以使用它来做这件事,或者我应该使用一个工厂 例如: container.RegisterType<IStrategy, FooStrategy>("FooStrategy"); container.RegisterType<IStrategy, BarStrategy>("BarStrategy"); var foo = container.Resolve<IStrategy>

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

在统一中是否有一个扩展点,我可以使用它来做这件事,或者我应该使用一个工厂

例如:

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

如果您有更复杂的逻辑,还可以使用自定义解析器。请参见此处:

您在做出决定的过程中掌握了哪些信息?容器不能仅仅猜测您需要什么。@Steven,这就是我需要扩展它的原因,我需要添加一些关于如何解析IStrategy类型的逻辑。