About .NET, ASP.NET, MVC, C#, WPF, WCF and everything related to .NET and more.

Mugen Injection [MVC]

Начало работы

Создайте новое приложение MVC и добавьте ссылки на библиотеки MugenInjection.Core, MugenInjection.Web and MugenInjection.Web.Mvc. После этого измените global.asax, так чтобы приложение наследовалось от MugenInjectionHttpApplication, а не от HttpApplication. После этого переопределите метод CreateInjector для создание главного контейнера, а также метод Configure для установки конфигурации для MVC приложения.
Пример кода:
public class MvcApplication : MugenInjectionHttpApplication
{
    #region Methods

    public static void RegisterGlobalFilters(GlobalFilterCollection filters)
    {
        filters.Add(new HandleErrorAttribute());
    }

    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

        routes.MapRoute(
            "Default", // Route name
            "{controller}/{action}/{id}", // URL with parameters
            new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
            );
    }

    #endregion

    #region Overrides of MugenInjectionHttpApplication

    /// <summary>
    /// Creates the injector that will manage your application.
    /// </summary>
    /// <returns>
    /// The created injector.
    /// </returns>
    protected override IInjector CreateInjector()
    {
        return new MugenInjector();
    }

    /// <summary>
    /// Configure current <see cref="T:MugenInjection.Web.MugenInjectionHttpApplication"/>
    /// </summary>
    /// <param name="applicationConfiguration">Configuration instance.</param>
    protected override void Configure(IApplicationConfiguration applicationConfiguration)
    {
        applicationConfiguration
            .WithHttpConfiguration()
            .WithMvcConfiguration();
    }

    /// <summary>
    /// Called when the application is started.
    /// </summary>
    protected override void OnApplicationStarted()
    {
        AreaRegistration.RegisterAllAreas();
        RegisterGlobalFilters(GlobalFilters.Filters);
        RegisterRoutes(RouteTable.Routes);
    }

    #endregion
}

Внедрение зависимостей в контроллеры

На предыдущем шаге мы подготовили все для возможности внедрений зависимостей в контроллеры. Теперь вы можете изменить конструктор контроллеров, так чтобы он принимал зависимости. Контроллеры будут автоматически создаваться при помощи MugenInjector, писать дополнительные binding для контроллеров не нужно, конечно вы по прежнему можете задавать binding для контроллеров, например, чтобы передавать дополнительную информацию и т.д.
Пример кода:
public class HomeController : Controller
{
    private readonly IService _service;
 
    public HomeController(IService service)
    {
         _service= service;
    }
 
    public void Index()
    {
        ViewModel.Message = _service.GetMessage();
        return View();
    }
}

Внедрение зависимостей в валидаторы

Пример демонстрирует, как создать простой ValidationAttribute с использованием внедрения зависимостей:
public class SimpleValidationAttribute : ValidationAttribute
{
    [Inject]
    public IService Service { get; set; }

    public override bool IsValid(object value)
    {
        return Service.IsValid(value);
    }
}

Комментарии
Оставить комментарий
*bold*
_italics_
+underline+
* Bullet List
** Bullet List 2
# Number List
## Number List 2
{"Do not apply formatting"}
{code:language} code here {code:language}.
Supports: aspx c#, c#, c++, html, sql, xml
[url:http://www.example.com]