1

Я следую за архитектурой Onion для моего веб-API и проекта AngularJS. В части Infrastructure.DependencyResolution я использую Simple Injector. Вот мой код:Простой инжектор с веб-интерфейсом API 2. PreApplicationStartMethod не запускается

[assembly: PreApplicationStartMethod(typeof(IocConfig), "RegisterDependencies")] 
namespace Infrastructure.DependencyResolution 
{ 
    public class IocConfig 
    { 
     private static Container _container; 

     public static void RegisterDependencies() 
     { 
       _container = new Container(); 

       _container.Verify(); 

       _container.RegisterWebApiRequest<IEntitiesContext>(() => 
       { 
        return new MyContext(); 
       }); 

       _container.RegisterWebApiRequest<IUserRepository, UserRepository>(); 
       _container.RegisterWebApiRequest<IAccountService, AccountService>(); 
       _container.RegisterWebApiRequest<IUnitOfWork, UnitOfWork>(); 

     } 
    } 
} 

Теперь если я пытаюсь поставить URL, чтобы перейти на мой контроллер счета, я получаю эту ошибку:

An error occurred when trying to create a controller of type 'AccountController'. Make sure that the controller has a parameterless public constructor.

я искал и нашел, что Simple Инжектор имеет несколько разных код для Web Api как это было предложено их site Like:

// This is an extension method from the integration package. 
container.RegisterWebApiControllers(GlobalConfiguration.Configuration); 

Я скопировал, что хорошо, но он не принял GlobalConfiguration.Configuration, я думаю, потому что я использую его в Весах ry проект.

Когда я установил точку останова в методе RegisterDependencies, Visual Studio не останавливается в точке останова.

Может ли кто-нибудь показать мне, куда идти?

+0

* он не принял GlobalConfiguration.Configuration * Что он принял? –

+0

Это означает, что он дал ошибку времени компиляции. –

+0

Какая ошибка? –

ответ

5

У вас не хватает является регистрация SimpleInjectorWebApiDependencyResolver, как описано в Web API integration guide:

GlobalConfiguration.Configuration.DependencyResolver = 
    new SimpleInjectorWebApiDependencyResolver(container); 

без переопределения по умолчанию IDependencyResolver Web API, в Web API будет просто пытаться создания экземпляров самого пульта управления, и это требует типы контроллеров для имеет конструктор по умолчанию. Путем замены этого IDependencyResolver на запросы SimpleInjectorWebApiDependencyResolver запросы для экземпляров контроллера пересылаются в контейнер Simple Injector.

При использовании Simple Injector's Web API Quick Start NuGet package вы получите максимальную выгоду. Это позволит загружать ваше приложение и позволяет быстро начать работу.

+0

GlobalConfiguration не распознается. Я пытаюсь включить использование System.Web.Http, но все же он не распознается. :( –

+0

@UsmanKhalid: 'GlobalConfiguration' определен в сборке' System.Web.Http.WebHost.dll'. Вам нужно будет добавить это. – Steven

+0

Добавлен и проверен. Но по-прежнему возникает такая же ошибка. Произошла ошибка, когда пытаясь создать контроллер типа AccountController ..... –

1

Я был в прежней ситуации раньше. вы можете найти решение по моему аналогичному вопросу here