如何防止引用程序直接访问 类? (。网)

How do you prevent referencing program from accessing classes directly? (.NET)

我很可能没有正确描述我的标题,我完全不知道我正在尝试做的事情的术语......所以如果你正在阅读这篇文章并且知道我应该要求什么..请分享.

这是我的问题。我正在创建一个 DLL。这个DLL里面当然会有几个类。调用解决方案将需要访问这些 classes 及其各种方法。

但是,我想强制调用程序只创建 "Parent\Root" class 的一个实例,因为我在任何时候都需要某些信息,他们将使用任何属于此 class(有点像许可证密钥,但实际上不是)。

所以从客户的角度来看..我希望它像这样工作..

FooDll.Client myFooClient = new FooDLL.Client(myLicensesKey)

myFooClient.Store.PlaceOrder()
myFooClient.Shop.FixWidget()

现在从我的 DLL 方面来看,我在想这样的事情......

public class Client
{
   public StoreLogic Store {get;}  //This is a internal Class that contains the method PlaceHolder
   public ShopLogic Shop {get;}    //This is an internal Class that contains the method FixWidget

   public Client(string LicenseKey)
   {
     set some internal global flags for the entire library
   }
 }

现在只要我将 classes StoreLogic 和 ShopLogic 声明为 "Public",我现在就可以做到这一点。但如果我这样做,客户现在可以这样做...

FooDll.StoreLogic myStore = new FooDLL.StoreLogic()

这是我不想要的。

只需将StoreLogicShopLogic的构造函数标记为internal即可。
这样做,只有包含在同一程序集中的 class 才能实例化这些,例如 Client class.

public class StoreLogic
{
    internal StoreLogic()
    {}

    public void PlaceOrder() {}
}

public class ShopLogic
{
    internal ShopLogic() 
    {}

    public void FixWidget() { }
}

public class Client
{
    public StoreLogic Store { get; }
    public ShopLogic Shop { get; }

    public Client(string LicenseKey)
    {
        this.Shop = new ShopLogic();
        this.Store = new StoreLogic();
    }
}