gpt4 book ai didi

c# - 项目之间的可访问性问题

转载 作者:行者123 更新时间:2023-11-30 22:36:59 27 4
gpt4 key购买 nike

我有 2 个库项目:AProject 和 BProject 以及一个网络项目:WebProject。
AProject 有一个类:

public class WorkerManager {
public Worker Get(long workerId) {
....
....
}

public Worker Get(Guid companyId, long workerId) {
....
....
}
}

我希望 BProject 的类能够使用 Worker Get 的第一个版本:

WorkerManager  a=new WorkerManager ();
a.Get(8);

而且我希望这个方法对于 web 项目是隐藏的。

如果我将 Worker Get(long workerId) 设置为内部,则 BProject 将无法使用此方法,如果我将其公开,则 Web 项目可以访问此方法。

如何阻止访问 Web 项目并允许访问 BProject?

最佳答案

听起来你需要Friend Assemblies .

它们基本上允许您将类设置为内部类,但指定 BProject 应该可以访问 AProject 的内部类。

更新

我实际上从未使用过 Friend Assemblies,因此我无法为您提供比 Google 更好的指导。

其他人提到过使用接口(interface),我同意这通常是个好方法。不过,它是否适合您将取决于您的代码结构。假设您将 WorkerManager 类移至新项目 (C)。项目 C 依赖于项目 B。项目 A 依赖于 C 和 B。WebProject 依赖于 A 和 B。

         /-------------\
WebProject -> A -> C -> B
\-------/

项目 B 现在定义如下接口(interface):

public interface IWorkerManager 
{
public Worker Get(long workerId);
}

而Project C中的WorkerManager实现了接口(interface):

public class WorkerManager : IWorkerManager {...}

现在项目 A 可以通过工厂生成 IWorkerManager,因此您的 Web 项目永远不必说 new WorkerManager()

public class WorkerManagerFactory
{
public IWorkerManager Get() {return new WorkerManager();}
}

现在项目 A 仍然可以访问其他方法:

new WorkerManager().Get(compGuid, workerId);

...但是 Web Project 只能访问接口(interface)定义的内容:

new WorkerManagerFactory().Get().Get(workerId);

这说明了一种可以实现您的目标的方法。您可以通过利用依赖注入(inject)找到更好的解决方案,但这种解释已经远远超出了原始问题的范围。

关于c# - 项目之间的可访问性问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6739703/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com