asp.net-mvc – 如何在ASP.NET MVC 2中使用模型绑定器的DI / IoC容器?

前端之家收集整理的这篇文章主要介绍了asp.net-mvc – 如何在ASP.NET MVC 2中使用模型绑定器的DI / IoC容器?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
假设我有一个User实体,我想在构造函数中将它的CreationTime属性设置为DateTime.Now.但作为单元测试采用者,我不想直接访问DateTime.Now,而是使用ITimeProvider:
public class User {
    public User(ITimeProvider timeProvider) {
        // ...
        this.CreationTime = timeProvider.Now;
    }

    // .....
}

public interface ITimeProvider { 
    public DateTime Now { get; }
}

public class TimeProvider : ITimeProvider {
    public DateTime Now { get { return DateTime.Now; } }
}

我在我的ASP.NET MVC 2.0应用程序中使用NInject 2.我有一个UserController和两个Create方法(一个用于GET,一个用于POST).用于GET的那个是直接的,但用于POST的那个不是那么直接而不是那么向前:P因为我需要弄乱模型绑定器告诉它获得ITimeProvider的实现的引用以便能够构造用户实例.

public class UserController : Controller {

    [HttpGet]
    public ViewResult Create() {
         return View();
    }

    [HttpPost]
    public ActionResult Create(User user) {

         // ...

    }
}

我还希望能够保留默认模型绑定器的所有功能.

有机会解决这个简单/优雅/等? :d

解决方法

怎么样而不是使用ITimeProvider试试这个:
public class User 
{
    public Func<DateTime> DateTimeProvider = () => DateTime.Now;

    public User() 
    {
        this.CreationTime = DateTimeProvider();
    }
}

在你的单元测试中:

var user = new User();
user.DateTimeProvider = () => new DateTime(2010,5,24);

我知道这不是很优雅,但不是弄乱模型绑定器,这可能是一个解决方案.如果这不是一个好的解决方案,您可以实现自定义模型绑定器并覆盖CreateModel方法,您将在模型的构造函数中注入依赖项.

原文链接:https://www.f2er.com/aspnet/249094.html

猜你在找的asp.Net相关文章