zoukankan      html  css  js  c++  java
  • StructureMap经典的IoC/DI容器

    StructureMap是一款很老的IoC/DI容器,从2004年.NET 1.1支持至今。

    一个使用例子

        //创建业务接口
        public interface IDispatchService { }
        public interface ICourier { }
        public interface IPaymentGateway { }
        public interface IPaymentMerchant { }
    
        //接口的实现
        public class DispacthService : IDispatchService
        {
            private ICourier _courier;
            public DispacthService(ICourier courier)
            {
                _courier = courier;
            }
            public override string ToString()
            {
                return _courier.ToString();
            }
        }
        public class FedExCourier : ICourier { }
        public class StreamLinePaymentMerchant : IPaymentMerchant { }
        public class PaymentGateway : IPaymentGateway
        {
            private IPaymentMerchant _paymentMerchant;
            public PaymentGateway(IPaymentMerchant paymentMerchant)
            {
                _paymentMerchant = paymentMerchant;
            }
            public override string ToString()
            {
                return _paymentMerchant.ToString();
            }
        }
    
        //业务使用
        public class OrderService
        {
            private IPaymentGateway _paymentGateway;
            private IDispatchService _dispacthService;
    
            public OrderService(IPaymentGateway paymentGateway, IDispatchService dispacthService)
            {
                _paymentGateway = paymentGateway;
                _dispacthService = dispacthService;
            }
            public override string ToString()
            {
                return string.Format("IPaymentGateway:{0}  IDispatchService:{1}", _paymentGateway.ToString(), _dispacthService.ToString());
            }
        }
    
        //配置依赖关系
        public class BootStrapper
        {
            public static void ConfigureStructureMap()
            {
                ObjectFactory.Initialize(x => x.AddRegistry<ModelRegistry>());
            }
        }
    
        public class ModelRegistry : Registry
        {
            public ModelRegistry()
            {
                For<IPaymentGateway>().Use<PaymentGateway>();
                For<IPaymentMerchant>().Use<StreamLinePaymentMerchant>();
                For<IDispatchService>().Use<DispacthService>();
                For<ICourier>().Use<FedExCourier>();
            }
        }
    
        class Program
        {
            static void Main(string[] args)
            {
                BootStrapper.ConfigureStructureMap();//启用配置
    
    
                OrderService orderService = ObjectFactory.GetInstance<OrderService>();
                Console.WriteLine(orderService.ToString());
    
                IPaymentGateway paymentGateway= ObjectFactory.GetInstance<PaymentGateway>();
                Console.WriteLine(paymentGateway);
    
                Console.ReadKey();
            }
        }
    

    文档:http://structuremap.github.io/documentation/
    下载:https://sourceforge.net/projects/structuremap/
    GitHub:https://github.com/structuremap/structuremap

  • 相关阅读:
    C# 中的委托和事件
    C# 托管资源和非托管资源
    .NET Core 2.0
    PyQt5教程——事件和信号(5)
    PyQt5教程——布局管理(4)
    PyQt5教程——菜单和工具栏(3)
    PyQt5教程——第一个程序(2)
    PyQt5教程——介绍(1)
    如何通过 GitLab 进行在Azure WebApp中持续部署
    如何检测 Azure Web 应用沙盒环境文件系统存储量
  • 原文地址:https://www.cnblogs.com/yangsofter/p/StructureMap.html
Copyright © 2011-2022 走看看