2

我有一种情况,我向我的类库公开了一个插件架构,我希望其他人能够实现我创建的接口并让他们的自定义实现被类使用。

我正在使用依赖注入(特别是构造函数注入)来实现这一点。

这很好用,除了我试图设计具有两个冲突目标的应用程序:

  • API 的使用者不能修改返回值;我创建了自定义只读集合和对象,internal在设置器上使用等以确保没有消费者可以修改它
  • 其他程序集中的插件应该能够访问这些内部方法和属性

这两个目标是相互冲突的,因为我的 API(或 C#)无法授予对插件程序集的internal访问权限(通过InternalsVisibleTo或类似方式),但不能授予一般消费者。


说明性示例

假设我们有三个程序集。我的类 ( Class)、插件程序集 ( Plugin) 和消费者程序集 ( Consumer)。

接口,IReturnValue指定 API 的返回值(Class程序集中的某些方法或类)。问题是这样的:我希望能够在 的任何给定实例上Plugin设置只读 ( ) 属性和索引器,但我不希望代码能够做到这一点。internalIReturnValueConsumer

由于正在使用插件系统,因此我无法提前知道要授予哪些程序集InternalsVisibleTo


在这种情况下,我真的应该关心消费者修改返回类型吗?如果他们这样做,似乎是他们自己的错。而且我想不出任何体面的解决方案来解决这个问题。

4

1 回答 1

3

正如我在评论中已经说过的,我不确定我是否正确理解了你的问题。

我这样理解你的问题:

您有一个由消费者和实施者使用的 A 类。消费者应该只能获取数据,实现者还应该能够设置数据。

在这种情况下,我将创建一个根据消费者需求建模的接口,该接口仅具有读取访问权限,而另一个接口具有实现者的读/写访问权限。

问题更新后更新:
消费者的只读接口已经存在:IReturnValue并且应该用于此目的。

您现在需要做的就是创建一个只写或读/写的接口,具体取决于 API 的需要。

于 2012-08-22T17:32:36.360 回答