我有一种情况,我向我的类库公开了一个插件架构,我希望其他人能够实现我创建的接口并让他们的自定义实现被类使用。
我正在使用依赖注入(特别是构造函数注入)来实现这一点。
这很好用,除了我试图设计具有两个冲突目标的应用程序:
- API 的使用者不能修改返回值;我创建了自定义只读集合和对象,
internal
在设置器上使用等以确保没有消费者可以修改它 - 其他程序集中的插件应该能够访问这些内部方法和属性
这两个目标是相互冲突的,因为我的 API(或 C#)无法授予对插件程序集的internal
访问权限(通过InternalsVisibleTo
或类似方式),但不能授予一般消费者。
说明性示例
假设我们有三个程序集。我的类 ( Class
)、插件程序集 ( Plugin
) 和消费者程序集 ( Consumer
)。
接口,IReturnValue
指定 API 的返回值(Class
程序集中的某些方法或类)。问题是这样的:我希望能够在 的任何给定实例上Plugin
设置只读 ( ) 属性和索引器,但我不希望代码能够做到这一点。internal
IReturnValue
Consumer
由于正在使用插件系统,因此我无法提前知道要授予哪些程序集InternalsVisibleTo
。
在这种情况下,我真的应该关心消费者修改返回类型吗?如果他们这样做,似乎是他们自己的错。而且我想不出任何体面的解决方案来解决这个问题。