C# 在C中,我们可以在运行时动态交换程序集吗#
考虑以下代码-C# 在C中,我们可以在运行时动态交换程序集吗#,c#,C#,考虑以下代码- namespace N1 { class A { //some implementation } class B { //some implemntation } } namespace N2 { class A { //slightly different implementation } class B { //slight
namespace N1
{
class A
{
//some implementation
}
class B
{
//some implemntation
}
}
namespace N2
{
class A
{
//slightly different implementation
}
class B
{
//slightly different implementation
}
}
显然,我们不能同时使用这两个程序集-
解决方法是使用完全限定的类名。重构1000行使用N1命名空间类的代码时。当必须使用N1或N2时,在工艺启动时作出一次决定
比C中的条件编译功能高级一点的东西++
#ifdef debug
#include <N1.h>
#elif
#include <N2.h>
#endif
我认为您需要的是接口和IoC容器/工厂
为
A
和B
提供的所有方法创建接口,在N1
和N2
参考的单独程序集中。在两个程序集中实现这些接口。然后连接一个IoC容器,在运行时解析正确的实现。我认为您需要的是接口和一个IoC容器/工厂
为
A
和B
提供的所有方法创建接口,在N1
和N2
参考的单独程序集中。在两个程序集中实现这些接口。然后连接一个IoC容器,在运行时解析正确的实现。但是,使用您描述的基于的方法的将不起作用。“使用名称空间”实际上只是一个编译时构造,因此它对运行时行为没有影响。在运行时,将使用完全限定的类型
处理这个问题的一个典型方法是使用IoC的形式,通过一个库,如
如果使两个名称空间中的类型派生自相同的基类,或实现相同的接口,则可以从两个单独的程序集中[Export]
类型。可以在运行时决定要编写的程序集。这样,您就可以根据需要[导入]
类型,并获得适当的类型。但是,您所描述的基于的方法将不起作用。“使用名称空间”实际上只是一个编译时构造,因此它对运行时行为没有影响。在运行时,将使用完全限定的类型
处理这个问题的一个典型方法是使用IoC的形式,通过一个库,如
如果使两个名称空间中的类型派生自相同的基类,或实现相同的接口,则可以从两个单独的程序集中[Export]
类型。可以在运行时决定要编写的程序集。这样,您就可以根据需要[导入]
类型,并获得适当的类型
if (...)
{
using N1;
}
else
{
using N2;
}