Мне было интересно, можно ли создать объект класса, у которого есть конструктор с инъекцией другого класса.
Класс, который я хочу создать:
using ClearBlog.IRepository;
using ClearBlog.Models;
namespace ClearBlog.Areas.Admin.Classes
{
public class AdminArticleTags
{
private readonly IGenericRepository<ArticleTag> _db = null;
public AdminArticleTags(IGenericRepository<ArticleTag> db)
{
_db = db;
}
public int InsertNew(int article, int tag)
{
// do smt here
}
}
}
Я хочу использовать метод InsertNew
вышеуказанного класса в другом классе, например:
using System.Linq;
using System.Web.Mvc;
using ClearBlog.Models;
using ClearBlog.Helpers;
using ClearBlog.IRepository;
using ClearBlog.Areas.Admin.Classes;
namespace ClearBlog.Areas.Admin.Controllers
{
public class Someclass : Controller
{
private readonly IGenericRepository<Tag> _db = null;
public Someclass(IGenericRepository<Tag> db)
{
_db = db;
}
public ActionResult Index()
{
AdminArticleTags at = new AdminArticleTags();
at.InsertNew(10, 15);
}
}
}
Сейчас это невозможно из-за того, что конструктор ожидает IGenericRepository
.
Это вообще возможно?
Если нет, то какой способ посоветуете? Имейте в виду тот факт, что мне нужно использовать IGenericRepository
, который является интерфейсом, используемым Ninject для привязки к реализации.
изменить:
то, что я пытаюсь сделать, очень просто. Я просто хочу создать объект AdminArticleTags
и получить доступ к его методу внутри Someclass
. даже если я создаю конструктор без параметров для AdminArticlesTags
, он выдает ошибки, потому что он не собирается вводить IGenericRepository
для этого объекта. (из-за конструктора)
Как мне создать объект AdminArticlesTags
и использовать его методы??
изменить2:
здесь я делаю привязки Ninject:
using Ninject;
using System;
using System.Collections.Generic;
using System.Web.Mvc;
using ClearBlog.IRepository;
using ClearBlog.Repository;
using AutoMapper;
namespace ClearBlog.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()
{
kernel.Bind(typeof(IGenericRepository<>)).To(typeof(GenericRepository<>));
kernel.Rebind<IMappingEngine>().ToMethod(context => Mapper.Engine);
}
}
}