Unity MVC Контроллер конструктор не ударил - PullRequest
0 голосов
/ 20 февраля 2019

Я скачал Unity.MVC 5.9.2 и у меня возникли проблемы с тем, что мой контроллер столкнулся с новой зависимостью, которая мне нужна.Из того, что я прочитал, все, что мне нужно сделать, это зарегистрировать тип в методе RegisterTypes, а Unity должна позаботиться об остальном

Полученная ошибка:

Не удалось выбратьконструктор для System.String Описание: необработанное исключение произошло во время выполнения текущего веб-запроса.Пожалуйста, просмотрите трассировку стека для получения дополнительной информации об ошибке и о том, где она возникла в коде.

Сведения об исключении: System.InvalidOperationException: Не удалось выбрать конструктор для System.String

Я следовал всем соответствующим учебным пособиям и до сих пор не знаю, чего мне здесь не хватает

Код:

/// <summary>
/// Specifies the Unity configuration for the main container.
/// </summary>
public static class UnityConfig
{
    #region Unity Container
    private static Lazy<IUnityContainer> container =
      new Lazy<IUnityContainer>(() =>
      {
          var container = new UnityContainer();
          RegisterTypes(container);
          return container;
      });

    /// <summary>
    /// Configured Unity Container.
    /// </summary>
    public static IUnityContainer Container => container.Value;
    #endregion

    /// <summary>
    /// Registers the type mappings with the Unity container.
    /// </summary>
    /// <param name="container">The unity container to configure.</param>
    /// <remarks>
    /// There is no need to register concrete types such as controllers or
    /// API controllers (unless you want to change the defaults), as Unity
    /// allows resolving a concrete type even if it was not previously
    /// registered.
    /// </remarks>
    public static void RegisterTypes(IUnityContainer container)
    {
        // NOTE: To load from web.config uncomment the line below.
        // Make sure to add a Unity.Configuration to the using statements.
        // container.LoadConfiguration();

        // TODO: Register your type's mappings here.
        container.RegisterType<ILoader, Loader>();
    }
}

public class SomeController : Controller
{
    private ILoader _loader;
    public SomeController (ILoader loader)
    {
        _loader = loader;
    }
    [HttpGet]
    public async Task<ActionResult> GetBatches()
    {
        try
        {
            return Json("", JsonRequestBehavior.AllowGet);
        }
        catch (Exception e)
        {
            return new HttpStatusCodeResult(HttpStatusCode.ServiceUnavailable, "Unable to get batches for recurring mail.");
        }
    }
}

    protected void Application_Start()
    {
        AreaRegistration.RegisterAllAreas();
        UnityConfig.RegisterTypes(UnityConfig.Container);
        FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
        RouteConfig.RegisterRoutes(RouteTable.Routes);
        BundleConfig.RegisterBundles(BundleTable.Bundles);
    }

public static class UnityMvcActivator
{
    /// <summary>
    /// Integrates Unity when the application starts.
    /// </summary>
    public static void Start() 
    {
        FilterProviders.Providers.Remove(FilterProviders.Providers.OfType<FilterAttributeFilterProvider>().First());
        FilterProviders.Providers.Add(new UnityFilterAttributeFilterProvider(UnityConfig.Container));

        DependencyResolver.SetResolver(new UnityDependencyResolver(UnityConfig.Container));

        // TODO: Uncomment if you want to use PerRequestLifetimeManager
        // Microsoft.Web.Infrastructure.DynamicModuleHelper.DynamicModuleUtility.RegisterModule(typeof(UnityPerRequestHttpModule));
    }

    /// <summary>
    /// Disposes the Unity container when the application is shut down.
    /// </summary>
    public static void Shutdown()
    {
        UnityConfig.Container.Dispose();
    }
}
...