Произошла ошибка при попытке создать контроллер типа «Имя контроллера» - PullRequest
0 голосов
/ 11 июля 2019

когда я зарегистрировал Unity в Моем приложении, оно выдает

Произошла ошибка при попытке создать контроллер типа 'InvoiceController'. Убедитесь, что у контроллера есть открытый конструктор без параметров

Я искал долго и упорно, но нашел много статей, и я последовал за ними все, но без успеха, который помог еще.

1 - установлен Unity Файл ConfigureUnity:

2 - добавлены следующие два класса Класс ConfigureUnity

public static void ConfigureUnity(HttpConfiguration config)
{
    var container = new UnityContainer();
    container.RegisterType<IInvoiceService, InvoiceService>();
    container.RegisterType<IInvoiceRepository, InvoiceRepository>();
    config.DependencyResolver = new UnityResolver(container);          
}

-UnityResolver

public class UnityResolver : IDependencyResolver
{
    protected IUnityContainer container;
    public UnityResolver(IUnityContainer container)
    {
        if (container == null)
        {
            throw new ArgumentNullException("container");
        }

        this.container = container;
    }

    public object GetService(Type serviceType)
    {
        try
        {
            return container.Resolve(serviceType);
        }
        catch (ResolutionFailedException)
        {
            return null;
        }
    }

    public IEnumerable<object> GetServices(Type serviceType)
    {
        try
        {
            return container.ResolveAll(serviceType);
        }
        catch (ResolutionFailedException)
        {
            return new List<object>();
        }
    }

    public IDependencyScope BeginScope()
    {
        var child = container.CreateChildContainer();
        return new UnityResolver(child);
    }

    public void Dispose()
    {
        Dispose(true);
    }

    protected virtual void Dispose(bool disposing)
    {
        container.Dispose();
    }
}

3 - зарегистрируйте его в WebApiConfig.

public static void Register(HttpConfiguration config)
{
    UnityConfig.ConfigureUnity(config);
}

Затем я использовал его в своем контроллере, как показано ниже

private IInvoiceService iInvoiceService;
private ApplicationDbContext _context;

public InvoiceController(IInvoiceService _iInvoiceService)
{
    iInvoiceService = _iInvoiceService;
    _context = new ApplicationDbContext();
}

Я пытался добавить пустой конструктор, и APIController всегда использует его. Куда я иду не так? Я действительно не знаю, что делать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...