获取Resolve unity容器的界面

问题描述 投票:0回答:1

如何将字符串传递给Unity容器以解析接口,因为我不知道每次都需要解析的接口,如果它将是IFoo或IBar,例如

interface IParentInterface{
string GetData();
}
interface IFoo:IParentInterface{}
interface IBar:IParentInterface{}
class FooService : IFoo{
string GetData(){}
}
IUnityContainer container = new UnityContainer();
string serviceName="IFoo";
IParentInterface parentInterfaceObj= container.Resolve<serviceName>();

因此,在这种情况下,如果我将“IFoo”作为字符串传递给容器,那么它将解析IFoo接口。

c# oop dependency-injection interface unity-container
1个回答
0
投票

您可以使用非泛型版本的Resolve并将其传递给类型实例。您可以从程序集限定的类型名称创建类型,例如:

var instance = container.Resolve(Type.Get("System.ComponentModel.INotifyPropertyChanged, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"));

不过,我建议使用命名注册,因为您可以定义自己的较短标识符。

container.Register<IService, SuperFoo>( "foo" );
var instance = container.Resolve<IService>( "foo" );
© www.soinside.com 2019 - 2024. All rights reserved.