我有两个独立/不同的实施"产品"同步。它们应该基于同步"方向"设置。
因此,类在我的项目中存储如下:
两个类都是相同的构造函数和一个共同的公共"运行"方法 - 启动同步过程。
目前,我正在创建这些类中的任何一个的实例并执行" 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();
}
}
这种方法有效,但我想用方法调用实现动态类实例化。
我尝试过的一种方法使用.NET的Activator.CreateInstance
功能,如下所示:
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 & 同步/ 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();
答案 0 :(得分:1)
尝试向两个类添加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();