在.NET Core中管理依赖项继承

时间:2016-06-30 16:13:43

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

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

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

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

Although I never referenced the concrete classes directly, they are still available for me to use.

我记得在以前版本的.NET中可以做这样的事情。现在有办法吗?

1)我试图建议的是什么?

2)可以用.Net Core完成吗?

3)为什么可以在以前的版本中完成。

1 个答案:

答案 0 :(得分:1)

我相信你可以使用朋友程序集来实现这一点,https://msdn.microsoft.com/en-us/library/mt632254.aspx我经常在需要访问定义为内部类的单元测试项目中使用它。

在你的SUT中 使用System.Runtime.CompilerServices;     使用System;

[assembly: InternalsVisibleTo("AssemblyB")]

// The class is internal by default.
class FriendClass
{
    public void Test()
    {
        Console.WriteLine("Sample Class");
    }
}

在你的Unit / Int测试中

// 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您还可以添加其他代码签名以进一步限制它。