我正在使用Repository模式并使用
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没有可访问的构造函数。&#34 ;错误! 这让我很生气,因为在更改js或cshtml文件之前这样做了。
发生此错误时,重新启动webapp无法正常工作甚至无法构建项目。让webapp再次运行的唯一方法是重建解决方案。
不过,我的存储库和服务都在不同的项目中。更新:
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 :(得分:1)
我设法通过在Application_Start中从服务程序集初始化一个虚拟类来解决这个问题。 工作代码看起来像
protected void Application_Start()
{
//For IoC Sake!
var dummyRepository = new DummyRepository();
var dummyService = new DummyService();
...
}