2016-03-01 2 views
1

Я выполнил образец ниже, и он отлично работает, пока я не заменил класс ProductsContext моим собственным классом LDAPConnector, который должен получать данные из AD, и поскольку он не является и получите ошибку Parameterless.единство Ошибка DI - убедитесь, что у контроллера нет конструктора без параметров

http://www.asp.net/web-api/overview/advanced/dependency-injection

То, что я должен добавить в webAPIConfig.cs для того, чтобы зарегистрировать этот новый класс?

меня попробовать это, но это не работает:

container.RegisterType<ILDAPConnector, LDAPConnector>(new HierarchicalLifetimeManager()); 

Я также попытался добавить строительство в обоих без параметров контроллера и в классе LDAPConnector, но до сих пор получить тот же вопрос.

Контроллер

public class ADAccountController : ApiController 
{ 
    IADAccountRepository _repository; 

    public ADAccountController() : base() 
    { 
    } 

    public ADAccountController(IADAccountRepository repository) 
    {    
     _repository = repository;    
    } 

    public IHttpActionResult GetByID(string id) 
    { 
     try 
     { 
      if (!string.IsNullOrWhiteSpace(id)) 
      { 
       AccountAD contact = _repository.GetByID(id); 

       if (contact == null) 
       { 
        return NotFound(); 
       } 
       return Ok(contact); 

репозитория, где я получаю ошибку на LDAPConnector connector = new LDAPConnector();

public class ADAccountRepository : IADAccountRepository 
{ 
    static ConcurrentDictionary<string, AccountAD> _todos = new ConcurrentDictionary<string, AccountAD>(); 

    private LDAPConnector connector = new LDAPConnector(); 

    public ADAccountRepository() 
    {    
     Add(new AccountAD { Name = "Item1" }); 
    }  

    public AccountAD GetByID(string id) 
    { 
     return connector.GetAccountDetails(id); 

     //AccountAD item; 
     //_todos.TryGetValue(id, out item); 
     //return item; 
    } 

The ADConnector

public class LDAPConnector : ILDAPConnector 
{   

    public LDAPConnector() 
    { 

    } 

    public AccountAD GetAccountDetails(string id) 
    { 
     AccountAD _AccountDetails = new AccountAD(); 

     List<SearchResult> searchResult = new List<SearchResult>(); 

наконец webapiconfig

сообщила

ошибки:

{"Message":"An error has occurred.","ExceptionMessage":"An error occurred when trying to create a controller of type 'ADAccountController'. Make sure that the controller has a parameterless public constructor.","ExceptionType":"System.InvalidOperationException","StackTrace":" at System.Web.Http.Dispatcher.DefaultHttpControllerActivator.Create(HttpRequestMessage request, HttpControllerDescriptor controllerDescriptor, Type controllerType)\r\n at System.Web.Http.Controllers.HttpControllerDescriptor.CreateController(HttpRequestMessage request)\r\n at System.Web.Http.Dispatcher.HttpControllerDispatcher.<SendAsync>d__1.MoveNext()","InnerException":{"Message":"An error has occurred.","ExceptionMessage":"Type 'ADConnector.Controllers.ADAccountController' does not have a default constructor","ExceptionType":"System.ArgumentException","StackTrace":" at System.Linq.Expressions.Expression.New(Type type)\r\n at System.Web.Http.Internal.TypeActivator.Create[TBase](Type instanceType)\r\n at System.Web.Http.Dispatcher.DefaultHttpControllerActivator.GetInstanceOrActivator(HttpRequestMessage request, Type controllerType, Func`1& activator)\r\n at System.Web.Http.Dispatcher.DefaultHttpControllerActivator.Create(HttpRequestMessage request, HttpControllerDescriptor controllerDescriptor, Type controllerType)"}} 
+0

Похож контратипом [этот вопрос] (http://stackoverflow.com/questions/24254189/make-sure-that-the-controller-has-a-parameterless-public-constructor-error) , Можете ли вы проверить, помогает ли это вам? – Andrei

+0

Не могли бы вы уточнить свой вопрос с точной ошибкой, которую вы видите, пожалуйста? Это поможет нам лучше понять, что происходит не так. –

+0

Я уже проверил решение от Андрея, но все еще проблема. – Denfer06

ответ

0

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

Не получил IDE в руке, но делает это?

container.RegisterType<ILDAPConnector>(new HierarchicalLifetimeManager(), 
    new InjectionFactory(c => new LDAPConnector())); 
+0

Я получаю ошибку \t «Microsoft.Practices.Unity.UnityContainer» не содержит определения для «Register», когда я пытаюсь добавить код – Denfer06

+0

'RegisterType' - извинения – sambomartin

+0

получить ту же ошибку (я обновил содержимое вопроса с помощью он) – Denfer06

Смежные вопросы

 Смежные вопросы