Web api,管理面板和mvc控制器的依赖注入的通用代码

时间:2018-02-01 08:17:21

标签: c# asp.net-mvc dependency-injection asp.net-web-api2 autofac

目前,我的解决方案文件中有以下4个项目:

  1. API(Web API)
  2. Web(MVC)
  3. 管理员(MVC)
  4. 服务层(C#Library)
  5. 所有3个Web项目都在使用服务层。 该服务使用Autofac容器注入。

    服务在启动期间在每个Web项目中注册,这导致代码重复。有没有更简单的方法可以在一个地方注册所有依赖项,以便所有项目都可以重用它?

    非常感谢任何帮助。

2 个答案:

答案 0 :(得分:0)

您的服务层应该注册接口实例(针对接口编程)。例如:

// Services.DLL
public interface IMyInterface
{
  void DoFoo();
}

internal class MyClass : IMyInterface
{
  public void DoFoo()
  {
  }
}

然后您只需使用Aufofac's Scanning For Modules

// Services.Dll
public class ServicesRegistrion : Module
{
  protected override void Load(ContainerBuilder builder)
  {
    builder.Register<MyClass>()
      .As<IMyInterface>()
      .InstancePerLifetimeScope();
  }
}

然后在每个项目中:

var assemblies = BuildManager
  .GetReferencedAssemblies()
  .Cast<Assembly>();

foreach(var assembly in assemblies)
{
  builder.RegisterAssemblyModules(assembly);
}

答案 1 :(得分:0)

您可以尝试另外一种方法

  • 添加 AutofacBootstrap 等常用文件,公开一个静态方法 除了Autofac容器,这种方法应该注册所有常见的 类。您可以将此文件放在一个单独的公共项目中。

  • 将该类包含为其他项目的链接。为了这 右键单击该项目,选择Add&gt;现有项目,并在 对话框下拉“添加”按钮,然后选择“添加为链接”。

    enter image description here

    现在您有一个公共文件,其中包含指向所有项目的链接。

  • 接下来,在个别项目启动时,调用常用方法 通过容器。另外,引导您的本地依赖项。

我希望这会有所帮助。