【发布时间】:2009-12-06 19:13:51
【问题描述】:
如果我接下来的解释不够合理,我现在道歉;我因此而闻名,尽管我尝试不这样做。
我正在编写一个使用用户定义插件的服务。我试图通过使用共享程序集中定义的接口来隔离它们——将它们的程序集排除在服务的 appdomain 之外。
让我感到沮丧的是抽象基类的使用。某些接口的所有实现都具有共同的功能,因此抽象基类是有意义的。如果一个抽象基础在服务程序集中,那么任何子类化它的插件都会将它们的程序集拖到服务的应用程序域中。但是,服务使用的抽象基(具有内部 setter 和公共 getter 的属性)中有内部成员,因此它需要与服务位于同一程序集中才能实现。
我想要的似乎是不可能的,但我也相信这是因为我采取了错误的方法。我正在拼命尝试在此练习中更好地利用良好的模式和实践,并在此过程中不断学习。
【问题讨论】:
-
由于接口是关键,我最终做的是让抽象基类实现一个内部接口。该内部接口实现了一个公共接口,因此基类同时实现了公共和内部成员。如果一个对象是基类的子类,那么我知道我可以访问我可以设置的内部接口属性。这似乎确实将插件程序集排除在主应用程序域之外!
标签: c# .net appdomain abstract isolation