在MVC中保存常用方法的位置

时间:2013-10-28 20:04:07

标签: asp.net-mvc

我需要在我的公司实施MVC架构,所以任何人都可以建议在所有页面上保留常用方法的位置。像:

陈述ddl,部门ddl还有角色列表等......

请告诉我如何将它们保留在建筑中。

由于

1 个答案:

答案 0 :(得分:2)

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

另一种选择是创建一个抽象的MyControllerBase类,该类从Controller继承,并将您的横切关注点放在那里,可能作为虚方法或属性。然后你所有的实际控制器都可以从MyControllerBase下载。

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

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

示例,根据您的请求(also in GitHub Gist

// 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);
    }
}

在上面的代码中,您需要配置依赖注入技术,但这绝对不在答案范围内(请在此处查看SO以获取帮助)。正确配置后,ILookupDataProvider的具体实现将在运行时注入以提供数据。

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