namespace StructureMapTest.Code{//接口 public interface IStructureMapService { string GetMessage();}//常规的实现测试 public class BuiltInDiIStructureMapService : IStructureMapService { public string GetMessage() { return &#34;内置依赖注入!&#34;; }}//StructureMap的实现测试 public class StructureMapService: IStructureMapService { public string GetMessage() { return &#34;Structuremap 依赖注入!&#34;; } }//封装的依赖注入类,可以进行多个注入 public class MyStructuremapRegistry : Registry { public MyStructuremapRegistry() { For<IStructureMapService>().LifecycleIs(Lifecycles.Container) .Use<StructureMapService>(); } }}4、在Program.cs注册组件
//默认的注册方法,这里列出便于对比//builder.Services.AddTransient<IStructureMapService,BuiltInDiIStructureMapService>();//Structuremap注册这里选择了单例,在Structuremap也只能单例builder.Services.AddSingleton<IContainer>(container=>newContainer(x=>{ x.AddRegistry<MyStructuremapRegistry>();//也可以直接注入//x.For<IStructureMapService>().Use<StructureMapService>();}));5、在控制器中使用
这里也是构造方法注入,跟普通的有点区别,代码如下:
public class HomeController : ControllerBase {privatereadonlyIStructureMapService_messagingService;publicHomeController(IContainercontainer)//这里是IContainer {//需要调用GetInstance _messagingService = container.GetInstance<IStructureMapService>(); ; } [HttpGet] [Route(&#34;StructureMap&#34;)] public IActionResult Index() { var content = _messagingService.GetMessage(); return Ok(content); } }6、在接口中查看效果