Метод действия контроллера не вызывается при использовании конструктора.Метод действия контроллера, не вызываемый при использовании инъекции зависимостей в asp.net core web api
Это класс запуска.
public class Startup
{
public Startup(IHostingEnvironment env)
{
var builder = new ConfigurationBuilder()
.SetBasePath(env.ContentRootPath)
.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
.AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true)
.AddEnvironmentVariables();
Configuration = builder.Build();
}
public IConfigurationRoot Configuration { get; }
// This method gets called by the runtime. Use this method to add services to the container.
public void ConfigureServices(IServiceCollection services)
{
var connection = Configuration.GetConnectionString("DefaultConnection");
services.AddDbContext<EmakitiContext>(options => options.UseSqlServer(connection));
// Add framework services.
services.AddMvc();
services.AddTransient<IMarketUOW<EmakitiContext>, MarketUow<EmakitiContext>>();
}
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
loggerFactory.AddConsole(Configuration.GetSection("Logging"));
loggerFactory.AddDebug();
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
});
}
}
Когда я добавил конструктор на HomeController метод действий не был called.However, если удалить конструктор, то метод действия будет называться. То, что я делаю неправильно, я не могу понять.
Вот контроллер
[Route("api/[controller]/[Action]")]
public class HomeController : Controller
{
private readonly IMarketUOW<EmakitiContext> _iMarketUow;
public HomeController(IMarketUOW<EmakitiContext> iMarketUow)
{
_iMarketUow = iMarketUow;
}
[HttpGet]
public GenericResponseObject<List<MarketViewModel>> GetMarketList()
{
GenericResponseObject<List<MarketViewModel>> genericResponseObject = new GenericResponseObject<List<MarketViewModel>>();
genericResponseObject.IsSuccess = false;
genericResponseObject.Message = ConstaintStingValue.Tag_ConnectionFailed;
try
{
genericResponseObject.Data = _iMarketUow.GetMarketList();
genericResponseObject.IsSuccess = true;
genericResponseObject.Message = ConstaintStingValue.Tag_ConnectionSuccess;
}
catch (Exception exception)
{
}
return genericResponseObject;
}
}
}
Вот интерфейс рынка Класс
public interface IMarketUOW<C> where C: DbContext
{
List<MarketViewModel> GetMarketList();
}
Вот это marketuow реализовать класс
public class MarketUow<C> : IMarketUOW<C> where C : DbContext
{
private readonly IGenericRepository<C, Market> _iGenericRepository;
public MarketUow(IGenericRepository<C, Market> iGenericRepository)
{
_iGenericRepository = iGenericRepository;
}
public List<MarketViewModel> GetMarketList()
{
List<MarketViewModel> listMarket = new List<MarketViewModel>();
var databaseList = _iGenericRepository.GetAll().ToList();
databaseList.ForEach(m => listMarket.Add(new MarketViewModel
{
MarketId = m.MarketId,
City = m.City,
CityF = m.CityF,
IsActive = m.IsActive,
Name = m.Name,
NameF = m.NameF,
SortOrder = m.SortOrder
}));
return listMarket;
}
}
Вот код Generic Interface
public interface IGenericRepository<C,T> where C: DbContext where T : class
{
IQueryable<T> GetAll();
IQueryable<T> FindBy(System.Linq.Expressions.Expression<Func<T, bool>> predicate);
void Add(T entity);
void Delete(T entity);
void Edit(T entity);
void Save();
}
Вот Generic классом реализации
public abstract class GenericRepository<C,T> : IGenericRepository<C, T> where T: class where C: DbContext, new()
{
private C _entities =new C();
public C Context
{
get { return _entities; }
set { _entities = value; }
}
public virtual IQueryable<T> GetAll()
{
IQueryable<T> query = _entities.Set<T>();
return query;
}
public IQueryable<T> FindBy(System.Linq.Expressions.Expression<Func<T, bool>> predicate)
{
IQueryable<T> query = _entities.Set<T>().Where(predicate);
return query;
}
public virtual void Add(T entity)
{
_entities.Set<T>().Add(entity);
}
public virtual void Delete(T entity)
{
_entities.Set<T>().Remove(entity);
}
public virtual void Edit(T entity)
{
_entities.Entry(entity).State = EntityState.Modified;
}
public virtual void Save()
{
_entities.SaveChanges();
}
}
Пожалуйста, добавьте шаблон класса «MarketUow». – Ahmar
@Ahmar - Я обновил полный код. Пожалуйста, дайте мне знать –