Unity 解析使用派生的类型 class
Unity resolve using type from derived class
我正在尝试设置一个结构,其中我有两组派生的 类(模型和视图)实现一个公共接口,我想使用 Unity 来允许我 create/resolve从模型实例查看。例如,
public interface ICommonA {}
public class ModelA : ICommonA {}
public class ViewA : ICommonA {}
public static void Main() {
// Setup Unity container - register ICommonA to resolve ViewA objects
var container = new UnityContainer();
container.RegisterType<ICommonA, ViewA>();
// At some point, we begin with a ModelA object.
ModelA m = new ModelA();
// Then, I want to automate the creation of ViewX objects from ModelX objects
// (I will have many such pairs) without checking exactly which type of model
// I currently have.
var v = container.Resolve(m.GetType(), String.Empty);
// Do something with v now.
}
我遇到的问题是我不能简单地要求 Unity 从模型类型 (ModelA) 中解析,它似乎不会自动扫描类型的接口并找到已注册的接口。我知道我可以通过显式检查每个传入模型类型并使用 container.Resolve<ICommonA>(String.Emtpy)
准确解析我需要的接口来解析视图,但我希望有一个更通用的解析步骤,它允许我添加更多 model/view 类型而无需更新我的解析代码来检查新模型类型。
这在 Unity 中可行吗?
不知何故,您的 "model" 需要提供有关要使用的视图类型的信息。几个可能的选项是直接指定类型或为已知接口的命名注册指定名称:
带类型(假设model.GetViewType()
returntypeof(ViewA)
)
var view = container.Resolve(model.GetViewType(), String.Empty);
使用命名注册(假设 model.GetViewRegistrationName()
returns "SomeName")
container.RegisterType<ICommonA, ViewA>("SomeName");
var view = container.Resolve(typeof(ICommonA),
model.GetViewRegistrationName());
我正在尝试设置一个结构,其中我有两组派生的 类(模型和视图)实现一个公共接口,我想使用 Unity 来允许我 create/resolve从模型实例查看。例如,
public interface ICommonA {}
public class ModelA : ICommonA {}
public class ViewA : ICommonA {}
public static void Main() {
// Setup Unity container - register ICommonA to resolve ViewA objects
var container = new UnityContainer();
container.RegisterType<ICommonA, ViewA>();
// At some point, we begin with a ModelA object.
ModelA m = new ModelA();
// Then, I want to automate the creation of ViewX objects from ModelX objects
// (I will have many such pairs) without checking exactly which type of model
// I currently have.
var v = container.Resolve(m.GetType(), String.Empty);
// Do something with v now.
}
我遇到的问题是我不能简单地要求 Unity 从模型类型 (ModelA) 中解析,它似乎不会自动扫描类型的接口并找到已注册的接口。我知道我可以通过显式检查每个传入模型类型并使用 container.Resolve<ICommonA>(String.Emtpy)
准确解析我需要的接口来解析视图,但我希望有一个更通用的解析步骤,它允许我添加更多 model/view 类型而无需更新我的解析代码来检查新模型类型。
这在 Unity 中可行吗?
不知何故,您的 "model" 需要提供有关要使用的视图类型的信息。几个可能的选项是直接指定类型或为已知接口的命名注册指定名称:
带类型(假设model.GetViewType()
returntypeof(ViewA)
)
var view = container.Resolve(model.GetViewType(), String.Empty);
使用命名注册(假设 model.GetViewRegistrationName()
returns "SomeName")
container.RegisterType<ICommonA, ViewA>("SomeName");
var view = container.Resolve(typeof(ICommonA),
model.GetViewRegistrationName());