如何使用Startup.cs和Assembly在MS测试项目中实现依赖注入

时间:2018-02-12 07:23:06

标签: asp.net asp.net-core dependency-injection mstest

在我们的应用程序中,我使用了Visual Studio 2017 .NET Core 2.我在Web项目Startup.cs类中实现了依赖注入。我必须在一个新的测试项目中实现相同的功能。如何在测试项目中注入存储库的依赖项?

请参阅以下代码段

using Microsoft.AspNetCore;
using Microsoft.AspNetCore.Hosting;
using NLog.Web;

namespace Kpmg.Kdat.Data.Services.Directory.Tests
{
    public class Program
    {
        public static void Main(string[] args)
        {
            BuildWebHost(args).Run();
        }

        public static IWebHost BuildWebHost(string[] args) =>
            WebHost.CreateDefaultBuilder(args)
                .UseStartup<Startup>()
                .UseNLog()
                .Build();
    }
}

上述代码的目的是注入依赖项。在Startup.cs中,我已经配置了所有依赖项。

使用上面的代码时,我收到以下错误:

  

错误CS0017程序定义了多个入口点。使用/ main编译以指定包含的类型   切入点。

请帮助解决问题。

1 个答案:

答案 0 :(得分:0)

为什么要将上述内容包含在单元测试项目中?一般来说,你不应该这样做。

如果你想要模拟依赖项,你可以在单元测试项目中做这样的事情。

public class TestServiceModule : Module
{
    protected override void Load(ContainerBuilder builder)
    {
        builder.Register(ctx =>
        {
            // return mock implementation of IMyService
        }).As<IMyService>()
        .SingleInstance();

        // register your mock services like above
     }
 }

并使用喜欢,

[TestInitialize]
public void Initialize()
{
    var builder = new ContainerBuilder();
    builder.RegisterModule<TestServiceModule>();
}

现在您可以使用IMyService。