【问题标题】:Dependency Injection through Constructor - Real time application通过构造函数进行依赖注入 - 实时应用
【发布时间】:2013-11-09 05:53:22
【问题描述】:

好的,我只是在学习 DI。我正在通过网络中的一些指针来理解它。然后我做了一个非常小的实时场景,只是为了自己理解它。

我正在应用 DI 构造函数注入模式来计算不同类型客户的产品价格折扣。如果是员工,则有单独的折扣,如果是普通买家,则将有单独的折扣。我不知道这是否适合在这种情况下应用 DI 或任何其他更好的解决方案/模式可用。我刚刚编译了代码,我很高兴它运行。但是,我对这件事的正确性没有信心。并且希望对此程序进行任何更正,例如微调,或者提出更好的方法等建议。另外,这真的是DI吗?如果这就是所谓的依赖注入,我们不是在静态 main 方法中对类进行硬编码吗?我在做什么是对的吗?这是我们在实时场景中所做的吗?它也会帮助像我这样的人。

class Program
{
    public interface IDiscount
    {
        void Discount(int amount);
    }
    public class ApplyDiscount : IDiscount
    {
        public void Discount(int amount)
        {
            Console.WriteLine("Normal Discount calculated is {0}", amount);
        }
    }
    public class ApplyEmployeeDiscount : IDiscount
    {
        public void Discount(int amount)
        {
            Console.WriteLine("Employee Discount calculated is {0}", amount);               
        }
    }
    public class Compute
    {
        public readonly IDiscount discount;

        public Compute(IDiscount discount)
        {
            this.discount = discount;
        }

        public void ComputeTotal(int productAmount)
        {
            this.discount.Discount(productAmount);
        }
    }
    static void Main()
    {
        IDiscount regularDiscount = new ApplyDiscount();
        IDiscount employeeDiscount = new ApplyEmployeeDiscount();
        Compute c = new Compute(employeeDiscount);
        c.ComputeTotal(200);
        Console.ReadLine();
    }
}

【问题讨论】:

    标签: c# .net c#-4.0 design-patterns


    【解决方案1】:

    我将把它分成三个部分:

    1. 是/否回答,是的,您注入了依赖项。

    2. 这是一个简短的博客,它将以简单(和简短)的方式阐明什么是依赖注入:Blog by James Shore

    3. 重炮:article by Martin Fowler。没什么可补充的(请注意,长篇深度文章)

    【讨论】:

    • Noctis,非常感谢,是的,我注射了 DI。那么这是我使用依赖的合适地方吗?另外,请告诉我为什么我们在 Main 方法中进行硬编码?
    • 我认为你在 1. 点之后停止了。现在,去阅读帖子 2. 并回来。与此同时,它主要是因为你把它放在那里。一些框架会让你在不同的地方定义它们,并根据不同的场景注入适当的类/接口。看看ninject,很酷的小 DI 框架。
    • Noctis,非常感谢你,好吧,我现在肯定会读完你给我的所有三个 ponters :) :)
    • 你读了吗?另外,如果这回答了您的问题,您可以将其标记为已回答:)(我已经在您已经熟悉 ninject 的其他问题中看到...)
    • Noctis,我刚刚读了 James 的博客,但我正在读另一篇。我会在这里更新你。与此同时,我遇到了其他事情:(好吧,Ninject 很有趣,但不知道如何使用它。我正在查看他们的网站。让我更新您的理解,并寻求您的帮助以理解它。再次感谢您 :)对不起,由于我没有完成阅读,所以我没有标记它。当然,这个答案对我帮助很大。今天我会尽快通知您。
    猜你喜欢
    • 2017-01-09
    • 1970-01-01
    • 2010-12-02
    • 1970-01-01
    • 2011-02-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多