Asp.net mvc MVC中常用方法的存放位置

Asp.net mvc MVC中常用方法的存放位置,asp.net-mvc,Asp.net Mvc,我需要在我的公司中实现MVC体系结构,所以任何人都可以建议在哪里保存在所有页面上调用的常用方法。比如: 说明ddl、部门ddl以及角色列表等 请给我一些建议,把它们放在建筑中的什么地方 谢谢根据应用程序的规模,有不同的解决方案。对于小型项目,您可以简单地在MVC应用程序本身中创建一组类。只需创建一个Utils文件夹和一个DropDownLists类就可以了。对于这样简单的东西,我发现可以接受使用静态方法返回所需的数据、列表或枚举 另一个选项是创建一个抽象MyControllerBase类,该类从

我需要在我的公司中实现MVC体系结构,所以任何人都可以建议在哪里保存在所有页面上调用的常用方法。比如:

说明ddl、部门ddl以及角色列表等

请给我一些建议,把它们放在建筑中的什么地方


谢谢

根据应用程序的规模,有不同的解决方案。对于小型项目,您可以简单地在MVC应用程序本身中创建一组类。只需创建一个Utils文件夹和一个DropDownLists类就可以了。对于这样简单的东西,我发现可以接受使用静态方法返回所需的数据、列表或枚举

另一个选项是创建一个抽象MyControllerBase类,该类从Controller派生,并将横切关注点放在其中,可能作为虚拟方法或属性。然后你所有的实际控制员都可以从MyControllerBase下来

对于较大的应用程序,或者在您可能与其他MVC应用程序共享这些类的情况下,创建一个共享库,如MySolution.Utils,并根据需要从所有项目中引用该库

更大的解决方案的另一种可能性是在运行时使用依赖项注入来注入需求。您可以考虑使用Unity或NITCUP来完成此任务。

例如,根据您的请求()

//在共享库中声明这些
公共接口iLookUpdateProvider
{
IEnumerable状态{get;}
} 
公共类LookUpdateProvider:iLookUpdateProvider
{
公共可数国家
{
得到
{
返回新字符串[]{“A”、“B”、“C”};
}
}
}
//然后将需求注入到控制器中
//在本例中,[Dependency]属性来自Unity(其他DI容器也可用!)
公共类MyController:Controller
{
[依赖性]
公共iLookUpdateProvider LookUpdateProvider{get;set;}
公共行动结果索引()
{
var myModel=新的myModel
{
States=lookUpdateProvider.States
};
返回视图(myModel);
}
}
在上面的代码中,您需要配置依赖项注入技术,但这肯定超出了答案的范围(请查看此处的帮助)。正确配置后,将在运行时注入ILookUpdateProvider的具体实现以提供数据


我建议的最后一个解决方案是在WCF服务层中托管共享服务,尽管这对于小型项目来说是非常过分的。这使得应用程序的各个部分可以在将来需要时分离出来,以提供高度可扩展的服务

基本控制器是放置它们的理想场所您认为viewmodel是放置它们的理想场所吗?您可以使用这些方法创建类,然后使用依赖项注入将它们注入控制器。这将有助于使您的总体设计更具单元可测试性。您有使用依赖注入的示例吗?谢天谢地,我的方法是将各种“助手”和“支持”类库按功能区组织在一起。你们有使用依赖注入的例子吗?这不是几行就可以描述的。有数百种选择和技术可供选择。我会看看是否能找到一些好的示例文章供您阅读…@user1882705更新了我的answer@SimonGoldstone“LookUpdateProvider.States”中的值为空
// declare these in a shared library
public interface ILookupDataProvider
{
    IEnumerable<string> States { get; }
} 

public class LookupDataProvider: ILookupDataProvider
{
    public IEnumerable<string> States
    {
        get
        {
            return new string[] { "A", "B", "C" };
        }
    }
}

// then inject the requirement in to your controller
// in this example, the [Dependency] attribute comes from Unity (other DI containers are available!)
public class MyController : Controller
{
    [Dependency]
    public ILookupDataProvider LookupDataProvider { get; set; }

    public ActionResult Index()
    {
        var myModel = new MyModel
        {
            States = LookupDataProvider.States
        };

        return View(myModel);
    }
}