相关疑难解决方法(0)

为什么不使用IoC容器来解析实体/业务对象的依赖关系?

我理解DI背后的概念,但我只是在学习不同的IoC容器可以做什么.似乎大多数人都主张使用IoC容器来连接无状态服务,但是如何将它们用于实体等有状态对象呢?

无论是对还是错,我通常会用行为填充我的实体,即使这种行为需要外部类.例:

public class Order : IOrder
{

    private string _ShipAddress;
    private IShipQuoter _ShipQuoter;

    public Order(IOrderData OrderData, IShipQuoter ShipQuoter)
    {
        // OrderData comes from a repository and has the data needed 
        // to construct order
        _ShipAddress = OrderData.ShipAddress;  // etc.
        _ShipQuoter = ShipQuoter;

    }

    private decimal GetShippingRate()
    {
        return _ShipQuoter.GetRate(this);
    }
}
Run Code Online (Sandbox Code Playgroud)

如您所见,依赖项是Constructor Injected.现在提出几个问题.

  1. 让您的实体依赖于诸如ShipQuoter之类的外部类别是否被视为不良做法?如果我正确理解定义,消除这些依赖性似乎会导致我陷入贫血领域.

  2. 使用IoC容器来解决这些依赖关系并在需要时构建实体是不好的做法吗?是否有可能做到这一点?

感谢您的任何见解.

entities dependency-injection castle-windsor ioc-container inversion-of-control

77
推荐指数
1
解决办法
9120
查看次数

C#如何在没有实现的情况下对接口方法进行单元测试

我是单元测试和 stackoverflow 的新手。

我必须RefreshAmount在以下界面中进行测试:

public interface IAccountService
{
    double GetAccountAmount(int accountId);
}
Run Code Online (Sandbox Code Playgroud)

这是一个依赖于这个接口的类:

public class AccountObj
{
    private readonly int _Id;
    private readonly IService _service;
    public AccountObj(int Id, IService service)
    {
        _Id = Id;
        _service = service;
    }
    public double Amount { get; private set; }
    public void RefreshAmount()
    {
        Amount = _service.GetAmount(_Id);
    }
}
Run Code Online (Sandbox Code Playgroud)

如何对 的行为进行单元测试RefreshAmount

RefreshAmount调用IService.GetAmount可能会调用后端办公室,但我没有它的实现。任何关于去路的建议将不胜感激。(我已经阅读了关于 moq 和依赖注入,但我对单元测试很陌生)

c# unit-testing dependency-injection moq

6
推荐指数
1
解决办法
2万
查看次数

依赖注入和实体框架

我正在使用MVVM灯和它的Ioc做一个wpf应用程序SimpleIoc.

我实现了这样的存储库模式:

 public interface ICrud<T> where  T : class 
    {
        IEnumerable<T> GetAll();
        Task<IEnumerable<T>> AsyncGetAll(); 
        void AddNew(params T[] items);
        void Delete(params T[] items);
        void Update(params T[] items);
        void SaveOrUpdate(params T[] items);
    }

 public class Crud<T> : ICrud<T> where T : class 
    {

        public void AddNew(params T[] items)
        {
            using (var context = new DataEntities())
            {
                foreach (T item in items)
                {
                    context.Entry(item).State = System.Data.Entity.EntityState.Added;
                }
                context.SaveChanges();
            }
        }

        public void Delete(params T[] items)
        {
            using (var context = new …
Run Code Online (Sandbox Code Playgroud)

c# wpf entity-framework dependency-injection mvvm

2
推荐指数
1
解决办法
2072
查看次数