Я выполнил образец ниже, и он отлично работает, пока я не заменил класс 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)"}}
Похож контратипом [этот вопрос] (http://stackoverflow.com/questions/24254189/make-sure-that-the-controller-has-a-parameterless-public-constructor-error) , Можете ли вы проверить, помогает ли это вам? – Andrei
Не могли бы вы уточнить свой вопрос с точной ошибкой, которую вы видите, пожалуйста? Это поможет нам лучше понять, что происходит не так. –
Я уже проверил решение от Андрея, но все еще проблема. – Denfer06