好的,所以我正在寻找一些大致如下所示的代码:
void DoSomething(object o)
{
if (o is Sometype1) {
//cast o to Sometype and do something to it
}
else if (o is Sometype2) {
//cast o to Sometype2 and do something to it
}
...
else if (o is SometypeN) {
//cast o to SometypeN and do something to it
}
}
现在一种方法是让所有o
用作参数的对象实现一个接口,如
interface ICanHaveSomethingDoneToMe
{
//expose various properties that the DoSomething method wants to access
}
但问题是我不希望我的所有对象都实现这个接口——do something 方法的逻辑并不真正属于它们。我应该使用什么模式来处理这个问题?
我怀疑类似的一系列实现
interface IPropertiesForDoingSomethingTo<T>
{
//expose various properties that the DoSomething method wants to access
}
可能会更好。对于我想要执行的每个对象类型,我都有一个实现,但是我遇到了这个新问题。我有时需要一种方法
IPropertiesForDoingSomethingTo<T> GetPropsGeneric(T t);
但这是否需要对其进行大规模切换?我是否应该定义一个带有大量方法的类,例如
IPropertiesForDoingSomethingTo<Someobject1> GetProps(Someobject1 t);
...
IPropertiesForDoingSomethingTo<Someobject1> GetProps(SomeobjectN t);
与无法在运行时添加新类型的通用版本相比,这存在问题。有什么巧妙的方法可以用 GetPropsGeneric 中的 DI 容器来解析容器吗?谢谢!