方法resolve()
从Dictionary返回初始化对象的实例,但我的问题是:是否有任何方法可以简化resolve()
方法,我们仍然将类型作为参数传递但是在我们没有&#39之后;需要施展它。我考虑过通用解决方案,但resolve<ClassAbraKadabra>(typeof(ClassAbraKadabra))
看起来重复且无法简化。
class Foo {
//something here
}
//reality
class Resolver{
public void proc() {
Foo foo = (Foo) resolve(typeof(Foo));
}
private object resolve(Type type) {
var obj = getInstanceOfObjectFromMapByType(type):
return obj;
}
}
//expected
class Resolver{
public void proc() {
Foo foo = resolve(typeof(Foo));
}
private ??? resolve(Type type) {
//magic here
}
}
//generic way
class Resolver{
public void proc() {
Foo foo = resolve<Foo>(typeof(Foo));
}
private T resolve<T>(Type type) {
var obj = getInstanceOfObjectFromMapByType(type):
return (T)obj;
}
}
答案 0 :(得分:1)
你的通用方法几乎就在那里,你不需要传入类型,只需从泛型方法中做一个typeof(T)
。
//generic way
class Resolver{
public void proc() {
Foo foo = resolve<Foo>();
}
private T resolve<T>() {
var obj = getInstanceOfObjectFromMapByType(typeof(T)):
return (T)obj;
}
}
如果你真的必须传入类型,那么“现实”方式是唯一的选择,你必须在更高级别进行转换,并尝试返回一个仍然有用的公共接口。