首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从字符串中创建类并在其上执行方法

从字符串中创建类并在其上执行方法
EN

Stack Overflow用户
提问于 2017-01-03 15:51:16
回答 1查看 114关注 0票数 1

我有两个独立/不同的“产品”同步实现。它们应该基于同步“方向”设置来运行。

因此,类存储在我的项目中如下:

这两个类都有相同的构造函数和一个公共的“运行”方法--它启动同步进程。

目前,我正在创建这些类的一个实例,并执行"Run“方法,如下所示:

代码语言:javascript
复制
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,如下所示:

代码语言:javascript
复制
var sync = Activator.CreateInstance(
    Type.GetType(
        string.Format("Sync.{0}.Product",
            _organisation.Data.Settings.Sync.Direction)));

但是,为了能够在这个对象上执行Run方法,我仍然必须这样做:

代码语言:javascript
复制
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

代码语言:javascript
复制
interface ISync
{
    void Run();
}

Sync/IN/Product.cs & Sync/OUT/Product.cs

代码语言:javascript
复制
public class Product : ISync
{
    public Product(Api _icApi, Logger _icLogger)
    { ... }

    public void Run()
    { ... }
}

类是动态实例化的&方法执行如下:

代码语言:javascript
复制
((ISync)Activator.CreateInstance(
    Type.GetType(
        string.Format("Sync.{0}.Product",
            _organisation.Data.Settings.Sync.Direction)),
    _icApi,
    _icLogger).Run(); 
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-01-03 16:04:59

尝试向两个类添加一个IProduct接口:

代码语言:javascript
复制
public interface IProduct
{
    void Run();
}

然后你就可以这样做:

代码语言:javascript
复制
var sync = (IProduct)Activator.CreateInstance(
    Type.GetType(
        string.Format("Sync.{0}.Product",
            _organisation.Data.Settings.Sync.Direction)));

sync.Run();
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41447280

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档