方法
resolve()
字典中返回初始化对象的实例,但我的问题是:有没有办法简化resolve()
方法,我们仍然将类型作为参数传递,但在我们不需要强制转换它之后。我想到了通用分辨率,但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;
}
}
您的泛型方式几乎就在那里,您不需要传入类型,只需从泛型方法内部执行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;
}
}
如果你真的必须传入类型,那么"现实"方式是唯一的选择,你必须在更高的级别进行转换,并尝试返回一个仍然有用的通用接口。