我有以下類/ intefaces一個服務層(IServices是一個空的接口):的IoC - Autofac並註冊與相同的通用接口的多個服務
public interface IForoChanService<T> : IService
{
T GetById(int id);
IQueryable SearchBy(Expression<Func<T, bool>> predicate);
IEnumerable<T> GetAll();
int Create(T entity);
void CreateMany(IEnumerable<T> entities);
void Delete(T entity);
void Delete(int id);
void DeleteMany(IEnumerable<T> entities);
void Update(T entity);
}
然後,我有一個抽象類執行這一簽名一般:
public abstract class ForoChanServiceBase<T> : IForoChanService<T> where T : EntityBase
{
public T GetById(int id)
{
return ChanDbContext.Set<T>().Find(id);
}
//all the other methods as well
}
最後的具體類:
public class CategoryService : ForoChanServiceBase<Category>
{
}
我想使用AutoFac注入這些服務:在構造函數(多類別,客戶等):我有一個基本的控制器:
public abstract class ForoChanBaseController: Controller
{
protected ForoChanServiceBase<Post> PostService { get; private set; }
protected ForoChanServiceBase<Comment> CommentService { get; private set; }
protected ForoChanServiceBase<Category> CategoryService { get; private set; }
protected ForoChanBaseController()
{
}
protected ForoChanBaseController(
ForoChanServiceBase<Post> postService,
ForoChanServiceBase<Comment> commentService,
ForoChanServiceBase<Category> categoryService)
{
PostService = postService;
CommentService = commentService;
CategoryService = categoryService;
}
}
而且我設置autofac這樣的:
public static void ConfigureIoc()
{
var builder = new ContainerBuilder();
builder.RegisterType<CommentService>().As<ForoChanServiceBase<Comment>>().InstancePerRequest();
builder.RegisterType<CategoryService>().As<ForoChanServiceBase<Category>>().InstancePerRequest();
builder.RegisterType<PostService>().As<ForoChanServiceBase<Post>>().InstancePerRequest();
builder.Build();
}
的問題是,我有被當控制器我需要使用任何服務方法,那傢伙(CategoryService)爲空:
public ActionResult Create()
{
var p = new PostFormNewVm
{
Categories = CategoryService.GetAll().Select(c => new CategoryVm { Id = c.Id, Title = c.Title })
};
return View(p);
}
旁邊這個錯誤是否我做錯了什麼?我無法讓它工作。
我也嘗試過inteface。
你的問題在默認構造函數中,protected ForoChanBaseController(){}。刪除它,它應該工作。您可能需要在實施此「ForoChanBaseController」控制器的地方修復您的課程。 – Prashant