【问题标题】:Managing dependency inheritance in .NET Core [duplicate]在 .NET Core 中管理依赖继承 [重复]
【发布时间】:2016-06-30 16:13:43
【问题描述】:

假设我有四个项目。 DataRepositories、DataRepositoryInterfaces、SetupInject、WebAPI。我希望 WebAPI 只能直接引用其中两个项目。本质上使 WebAPI 对我的存储库接口的具体实现一无所知。

为了做到这一点,我已经做到了,所以 SetupInjections 的主要目的是定义将被注入的具体类型。但是,当我引用 InjectionSetup 项目时,我也会在 WebAPI 项目中获得它的所有依赖项。

虽然我从未直接引用过定义具体类的项目,但它们仍然可供我使用。 主要目的是限制开发人员制作类的实例在这个项目中。

我记得在以前的 .NET 版本中能够做到这一点。现在有什么办法吗?

1) 建议我尝试做什么?

2) .Net Core 可以做到吗?

3) 为什么以前的版本可以做到。

【问题讨论】:

    标签: c# .net asp.net-web-api dependency-injection asp.net-core


    【解决方案1】:

    我相信您可以使用 Friend Assemblies 来做到这一点,https://msdn.microsoft.com/en-us/library/mt632254.aspx 我经常在需要访问定义为内部的类的单元测试项目中使用它。

    在您的 SUT 中 使用 System.Runtime.CompilerServices; 使用系统;

    [assembly: InternalsVisibleTo("AssemblyB")]
    
    // The class is internal by default.
    class FriendClass
    {
        public void Test()
        {
            Console.WriteLine("Sample Class");
        }
    }
    

    在您的单元/内部测试中

    // Public class that has an internal method.
    public class ClassWithFriendMethod
    {
        internal void Test()
        {
            Console.WriteLine((new FriendClass).Test);
        }
    
    }
    

    这里有更多细节,https://msdn.microsoft.com/en-us/library/system.runtime.compilerservices.internalsvisibletoattribute(v=vs.110).aspx您还可以添加额外的代码签名以进一步限制它。

    【讨论】:

    • 这很好,但是我希望更加隐含而不是声明每个类我希望隐藏整个程序集。不过感谢您的回答,我会一直使用它,直到找到更适合替换它的东西
    猜你喜欢
    • 2021-04-16
    • 1970-01-01
    • 2021-08-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-01
    • 2021-02-12
    • 1970-01-01
    相关资源
    最近更新 更多