0

我在这里查看了许多线程(也许我使用了错误的术语),但我正在将 Web 应用程序转换为通过 NInject 使用 IoC。我的其他 IoC 项目相当小,所以这不是一个大问题,但是对于以下情况,推荐的做法是什么......

我的对象的结构看起来像这样......

public class Address
{
    public virtual string Street { get; set; }
    public virtual City City { get; set; }
}

城市是它自己的对象...

public class City
{
    public virtual string Name { get; set; }
}

现在我一直在处理不可避免的“对象为空”异常,如下所示......

public void DoThing()
{
    new Address address();
    address.Street = _street;
    address.City = new City();
    address.City.Name = _cityName;
    DoOtherThing(address);
}

这对于较小的项目来说很好......但是现在我们正在谈论更大的事情,它变成了一件真正的苦差事。(向我的对象添加另一个对象,这可能意味着我需要在 100 多个地方执行此操作,假设我找到了它们)

在国际奥委会之前,这很容易通过做这样的事情来处理......

public class Address
{
    private string street;
    private City city;

    public Address()
    {
        street = string.Empty;
        City = new City();
    }

    public string Street 
    { 
        get { return street; } 
        set { street = value; }
    }
}

我想弄清楚(也许我只是在我读过的指南中完全错过了这个细节)是如何以优雅的方式在 IoC 中做同样的事情?

我所遵循的结构基于 Tony Sneed 在http://www.develop.com/onionarchitecture上提出的结构

唯一显着的区别是我的服务级别还没有任何东西,因为我们的大部分东西只是从数据库中读取/写入数据库,两者之间几乎没有显着的操作。(我可能需要在服务级别添加一些东西,但还没有完成,仍然不完全清楚该级别与存储库的确切属于什么。)

让我知道是否有更多细节可以提供帮助(IoC 工作正常,我只需要解决上述问题以保持合理的可维护性)

4

1 回答 1

2

如果您所做的只是创建一个空对象,那么没有真正的理由使用 IoC(更好的术语是依赖注入,因为它更具体)。除非您要将加载的 City 对象传递给您的 Address 对象,否则只需在构造函数中继续使用 new 即可。在这种情况下使用 IoC/DI 没有任何好处。

当您需要在运行时将依赖项传递给对象时,您应该使用 DI。虽然这在技术上是一个依赖项,但它是一个简单的空对象这一事实并不能使它成为一个好的候选对象。

于 2013-04-26T16:16:45.347 回答