Использование Ninject и инъекционный уровень данных в MVC3


Я пытаюсь сделать приложение MVC3 со сменной слой данных. В настоящее время у меня это в один файл (глобальные.эйсакс.CS) для brievity.

Это, кажется, работает как я хочу, но как я новичок в ДИ, я действительно хотел бы услышать комментарии на этот код.

public interface IDataLayer
{
    dynamic GetItem(int id);
    dynamic SaveItem(dynamic item);
}

public class MockDataLayer : IDataLayer
{
    public dynamic GetItem(int id)
    {
        dynamic item = new System.Dynamic.ExpandoObject();
        item.Id = id;
        item.Name = "Some name";
        return item;
    }
    public dynamic SaveItem(dynamic item)
    {
        return item;
    }
}
public class MainController : Controller
{
    public ActionResult Display(int id = 0)
    {
        dynamic viewModel = Global.DataContext.GetItem(id);
        return View(viewModel);
    }
}
public class Global : System.Web.HttpApplication
{        
    public static IDataLayer dataContext;

    protected void Application_Start(object sender, EventArgs e)
    {
        IKernel kernel = new StandardKernel();

        kernel.Bind<IDataLayer>().To<MockDataLayer>();
        dataContext = kernel.Get<IDataLayer>();

        RouteTable.Routes.MapRoute("", "{id}", new { controller = "Main", action = "Display", id = UrlParameter.Optional });
    }
}


993
2
задан 25 июля 2011 в 03:07 Источник Поделиться
Комментарии
1 ответ

Один совет я дал бы это использовать "Ninject для АСП чистый MVC 3 с" NuGet-пакета. Установить этот пакет в ваш проект. После этого вы должны найти файл с именем "NinjectMVC3.КС" находится в папке "файл App_Start". В этом файле, ищет метод с именем RegisterServices():

private static void RegisterServices(IKernel kernel)
{
kernel.Bind<IDataLayer>().To<MockDataLayer>().InRequestScope();
}

Это создает MockDataLayer должны быть возвращены для каждого отдельного веб-запроса. Это гарантирует, что MockDataLayer удаляются, когда веб-запрос завершен. Теперь, когда вы хотите создать экземпляр данных слоя, использовать MVC на встроенный DependencyResolver класс:

var dataContext = DependencyResolver.Current.GetService<IDataLayer>();

3
ответ дан 7 августа 2011 в 09:08 Источник Поделиться