【问题标题】:General Purpose Interface built-in to .NET Framework.NET Framework 内置的通用接口
【发布时间】:2015-02-15 17:48:17
【问题描述】:

我会使用 AppDomains 来管理不同程序集中的对象:

object _Instance = _AppDomain.CreateInstanceFromAndUnwrap(assemblyFileNamePath, typeName);

我定义了一个这样的接口

interface IInvokable { int Invoke(string[] args); }

这样我就可以在任何实现它的对象上调用方法

(_Instance as IInvokable).Invoke(new string[]{methodName,parameters});

我不喜欢这样,因为 AFAIK 我生成的任何程序集都必须引用我定义 IInvokable 的程序集

问题:是否有任何内置接口可供我使用,可能是专门用于此目的,或者用于用户定义的目的。我也愿意接受有关如何解决问题的其他建议。

【问题讨论】:

  • 只使用反射获取类型和方法并调用它?所以创建实例并解包 ... GetType ... GetMethod("Invoke") ... 然后 MethodInfo.Invoke 它。

标签: interface appdomain


【解决方案1】:

即使有这样的界面,使用它也是一个坏主意。每个接口都是一个契约,并且具有意义。接口的定义可能会随着时间而改变。例如,在 .NET 中,具有相同成员的不同接口,但具有不同的名称、命名空间和程序集。当您的旧 WPF .NET 4.0 应用程序在升级到 .NET 4.5 时无法编译时,我们已经看到 .NET 4.5 中的向后不兼容更改。所以我个人建议坚持你目前的方法。

但是,如果您仍然想按照自己的方式进行操作,那么您可以尝试 ICommand 并使用 Func ;) .

而且我也不建议像 ta.speot.is 所建议的那样做一个额外的反射操作,因为反射操作对计算资源来说很困难,而且类型安全性较低(您会丢失一些编译时检查)。

您还可以从熟悉MEF 中受益。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-11-04
    • 1970-01-01
    • 2012-07-16
    • 2022-12-31
    • 1970-01-01
    • 2010-09-17
    • 1970-01-01
    • 2022-12-12
    相关资源
    最近更新 更多