如何防止引用程序直接访问 类? (。网)
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()
这是我不想要的。
只需将StoreLogic
和ShopLogic
的构造函数标记为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();
}
}
我很可能没有正确描述我的标题,我完全不知道我正在尝试做的事情的术语......所以如果你正在阅读这篇文章并且知道我应该要求什么..请分享.
这是我的问题。我正在创建一个 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()
这是我不想要的。
只需将StoreLogic
和ShopLogic
的构造函数标记为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();
}
}