2014-03-12 3 views
0

Я использую Repository шаблон и с помощьюUnity.MVC5 Тип IUserService не имеет доступный конструктор

container.RegisterTypes(
    AllClasses.FromLoadedAssemblies().Where(x => 
     x.Namespace != null && (x.Namespace.Contains("TM.Service") || 
      x.Namespace.Contains("TM.Repository")) 
    ), 
    WithMappings.FromMatchingInterface, 
    WithName.Default, 
    WithLifetime.PerResolve 
); 

Каждая вещь работает сначала, но после изменения cshtml файл или даже файл JS во время выполнения, (Начать отладку или Начать без отладки) Я получаю «Тип IUserService не имеет доступного конструктора». ошибка! Это сводит меня с ума, потому что это работало перед изменением файла js или cshtml.

При возникновении этой ошибки перезапуск webapp не работает или даже не строится. Единственный способ снова запустить webapp - это перестроить решение.

btw, мои хранилища и службы находятся в отдельных проектах.

UPDATE:

public class UserService : BaseService<User, IUserRepository>, IUserService 
    { 
     public UserService(IUserRepository repository) : base(repository) 
     { 
      this.Repository = repository; 
     } 

} 


public interface IUserService : IBaseService<User> 
    { 

    } 

public interface IBaseService<TModel> : IDisposable where TModel : BaseEntity 
    { 
     object Create(TModel model); 
     object Edit(TModel model, string[] blackFields = null, string[] whiteFields = null); 
     object Delete(int id); 
     IEnumerable GetAll(); 
     IEnumerable GetGridData(); 
     IEnumerable<TModel> FindBy(Expression<Func<TModel, bool>> predicate); 
     int Count(Expression<Func<TModel, bool>> predicate); 
    } 


public interface IUserRepository : IBaseRepository<User> 
{ 
} 


public interface IBaseRepository<TModel> : IDisposable where TModel : BaseEntity 
    { 
     TMContext Context { get; set; } 

     IDbSet<TModel> Entity { get; set; } 

     IQueryable<TModel> All { get; } 

     IQueryable<TModel> AllIncluding(params Expression<Func<TModel, object>>[] includeProperties); 

     TModel Find(int id); 

     IEnumerable<TModel> FindBy(Expression<Func<TModel, bool>> predicate); 

     int Count(Expression<Func<TModel, bool>> predicate); 

     void Insert(TModel model); 

     void Update(TModel model, string[] blackFields = null, string[] whiteFields = null); 

     void Delete(int id); 

     void Save(); 

    } 

и использование:

public class UserController : BaseController<User> 
    { 
     public UserController(IUserService service) 
     { 
      Service = service; 
     } 
    } 
+0

Можете ли вы показать класс, реализующий IUserService? – Dismissile

+0

@ Dismissile, я обновил свой вопрос с занятий. Тпх –

ответ

1

мне удалось решить эту проблему с инициализацией фиктивного класса от узла услуг в Application_Start. Рабочий код выглядит как

protected void Application_Start() 
    {   
     //For IoC Sake! 
     var dummyRepository = new DummyRepository(); 
     var dummyService = new DummyService(); 

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