首页 > 文章列表 > Inversify 和 Inversify-inject-decorators

Inversify 和 Inversify-inject-decorators

241 2025-01-23

Inversify 和 Inversify-inject-decorators

这是一个很好的例子,让您轻松理解如何反转和反转注入装饰词。

我将按照以下每个步骤改进代码:

第1步:普通课

public class cart
{
    private readonly idatabase _db;
    private readonly ilogger _log;
    private readonly iemailsender _es;

    public cart()
    {
        _db = new database();
        _log = new logger();
        _es = new emailsender();
    }

    public void checkout(int orderid, int userid)
    {
        _db.save(orderid);
        _log.loginfo("order has been checkout");
        _es.sendemail(userid);
    }
}

第2步:应用依赖注入

public cart(idatabase db, ilogger log, iemailsender es)
{
        _db = db;
        _log = log;
        _es = es;
 }

 //dependency injection simple way
 cart mycart = new cart(new database(),
                   new logger(), new emailsender());
 //when you want to change new class. update here
 mycart = new cart(new xmldatabase(),
              new fakelogger(), new fakeemailsender());

第 3 步:应用依赖图绑定

//Create each Interface
DIContainer.SetModule<IDatabase, Database>();
DIContainer.SetModule<ILogger, Logger>();
DIContainer.SetModule<IEmailSender, EmailSender>();

DIContainer.SetModule<Cart, Cart>();

//MyCart just need to use it
var myCart = DIContainer.GetModule(); 
public Cart()
    {
        _db = DIContainer.GetModule();
        _log = DIContainer.GetModule();
        _es = DIContainer.GetModule();
    }

//When you want to change some module in Cart. Just need to change in where it define.
DIContainer.SetModule<IDatabase, XMLDatabase>();`
来源:https://dev.to/t_bi_a6d385ba2e05d3d128/ioc-1m74

本类最新

查看更多