我有两个独立/不同的“产品”同步实现。它们应该基于同步“方向”设置来运行。
因此,类存储在我的项目中如下:

这两个类都有相同的构造函数和一个公共的“运行”方法--它启动同步进程。
目前,我正在创建这些类的一个实例,并执行"Run“方法,如下所示:
private void RunProductSync()
{
if (_organisation.Data.Settings.Sync.Direction == "IN")
{
// Sync IN
(new Sync.IN.Product(
_icApi,
_icLogger)).Run();
}
else if (_organisation.Data.Settings.Sync.Direction == "OUT")
{
// Sync OUT
(new Sync.OUT.Product(
_icApi,
_icLogger)).Run();
}
}这种方法可以工作,但是我想用方法调用实现一个动态类实例化。
我尝试过的一种方法是使用Activator.CreateInstance特性的.NET,如下所示:
var sync = Activator.CreateInstance(
Type.GetType(
string.Format("Sync.{0}.Product",
_organisation.Data.Settings.Sync.Direction)));但是,为了能够在这个对象上执行Run方法,我仍然必须这样做:
if (_organisation.Data.Settings.Sync.Direction == "IN") {
(sync AS Sync.IN.Product).Run();
} else if (_organisation.Data.Settings.Sync.Direction == "OUT") {
(sync AS Sync.OUT.Product).Run();
}这仍不比我一开始做得好。有更好的方法吗?
更新
感谢@theo -我有以下工作为我自己:
ISync.cs
interface ISync
{
void Run();
}Sync/IN/Product.cs & Sync/OUT/Product.cs
public class Product : ISync
{
public Product(Api _icApi, Logger _icLogger)
{ ... }
public void Run()
{ ... }
}类是动态实例化的&方法执行如下:
((ISync)Activator.CreateInstance(
Type.GetType(
string.Format("Sync.{0}.Product",
_organisation.Data.Settings.Sync.Direction)),
_icApi,
_icLogger).Run(); 发布于 2017-01-03 16:04:59
尝试向两个类添加一个IProduct接口:
public interface IProduct
{
void Run();
}然后你就可以这样做:
var sync = (IProduct)Activator.CreateInstance(
Type.GetType(
string.Format("Sync.{0}.Product",
_organisation.Data.Settings.Sync.Direction)));
sync.Run();https://stackoverflow.com/questions/41447280
复制相似问题