У меня есть ProductController.csКак передать параметры действия контроллера бетонному типу Ninject?
namespace AmazonProductAdvertisingAPI.WebUI.Controllers
{
public class ProductController : Controller
{
public ProductController(IProductCollection productCollection)
{
_productCollection = productCollection;
}
public static string Title
{
get
{
return _title;
}
set
{
_title = value;
}
}
public static int PageNumber
{
get
{
return _pageNumber;
}
set
{
_pageNumber = value;
}
}
public static int ItemsPerPage
{
get
{
return _itemsPerPage;
}
set
{
_itemsPerPage = value;
}
}
// GET: Product
public ActionResult List(int page = 1, string search = null)
{
ProductListViewModel model = new ProductListViewModel
{
Products = _productCollection.Products
.OrderBy(product => product.Title)
.Skip((page - 1) * pageSize)
.Take(pageSize),
PagingInfo = new PagingInfo
{
CurrentPage = page,
ItemsPerPage = pageSize,
TotalItems = _productCollection.Products.Count()
}
};
return View(model);
}
}
}
NinjectDependencyResolver.cs
namespace AmazonProductAdvertisingAPI.WebUI.Infrastructure
{
public class NinjectDependencyResolver : IDependencyResolver
{
private IKernel kernel;
public NinjectDependencyResolver(IKernel kernelParam)
{
kernel = kernelParam;
AddBindings();
}
public object GetService(Type serviceType)
{
return kernel.TryGet(serviceType);
}
public IEnumerable<object> GetServices(Type serviceType)
{
return kernel.GetAll(serviceType);
}
private void AddBindings()
{
// Create dependency here
kernel.Bind<IProductCollection>().To<AmazonProductCollection>()
.WhenInjectedInto<ProductController>()
.WithConstructorArgument("title", ProductController.Title)
.WithConstructorArgument("pageNumber", ProductController.PageNumber)
.WithConstructorArgument("itemsPerPage", ProductController.ItemsPerPage);
}
}
}
AmazonProductCollection класс имеет конструктор:
public AmazonProductCollection(string title, int pageNumber, int itemsPerPage)
Я хочу, чтобы получить AmazonProductCollection собственных параметров из списка параметров действия от контроллера продукта , потому что некоторые из них получаются, когда пользователь заполняет TextBoxt и нажимает кнопку «Поиск» в html-view form. Например, я хочу использовать строку параметров «поиск» из списка действий и передать в AmazonProductCollection как параметр конструктора «title».
Я прочитал это сообщение: How to pass parameters to a transient object created by Ninject?, но я не понимаю, как можно создавать такие же вещи в моей ситуации.
Может ли кто-нибудь помочь мне с Ninject?
Где лучше поставить эти классы заводов? В проекте домена или mvc? Не могли бы вы указать папку, которая лучше использовать для конронов? –
Завод должен жить в корне композиции. Это как можно ближе к точке входа приложения. Проект MVC является подходящим местом. Где у вас есть класс «NinjectDependencyResolver»?Вы можете поместить завод в ту же папку этого класса. –
Спасибо! Ваш ответ помогает мне! –