我创建了一个工厂程序集,可以处理任何类型的事务(支持ITransactionType
)。我可以在单独的程序集中添加更多的事务类型,所有这些都可以在工厂使用,而不需要重新编译(这是工厂的好处之一)。
有一个可以处理的事务类型的实际列表,所以我已经定义了一个带有const字符串的静态类,它保存在一个单独的程序集中。其他程序集引用它以确保一致的事务类型名称。这个程序集不由工厂引用,因为它不需要知道,并且会导致该项目的不必要的编译。
这一切都很好。我永远不会在工厂项目中引用主列表程序集,因为它知道它没有意义。
但是,我担心如果项目由不了解所有这些的人维护,他们可能会错误地将引用添加到主列表程序集中。有没有办法阻止添加此引用? IOW,如果某人(可能甚至将来自己)添加了引用,是否有某种方法可以强制编译错误,指出行为不可接受的原因解释?
答案 0 :(得分:2)
我可以想到几种方法,但据我所知,语言(.net,C#,vb)没有提供特定的方法:
#warning
,并始终发出:“不应该使用XXX编译”,请确保它不在“。Transaction
工厂的引用,这将有效防止以相反的方式添加引用。cctor
(静态构造函数)动态检查是否存在引用,如果找到则抛出异常。如果有人试图添加对此lib的引用,这将抛出一个硬异常(但仅限于任何测试)。MustNotReferenceXXX
并在其体内动态检查是否引用了lib。如果我能想到更容易的话,我会更新,但我认为第5和第6点是最容易实现和未来的证据。