나는 NHibernate를 사용하고 있으며, Session을 반환하는 메서드가있는 BootStrapper 클래스가 있습니다. 내 Repository 클래스에서 ISession 객체를 전달하고 있습니다. 내 컨트롤러에서는 생성자 IRepository 객체를 전달하고 있습니다.Ninject 클래스를 등록하고 해당 클래스를 생성자에 삽입
IRepository를 Repository 클래스에 바인딩하는 데 성공했지만 Repository 클래스를 바인딩/등록하는 방법을 알 수 없으므로 인스턴스화되어 컨트롤러를 바인딩 할 때 BootStrapper 클래스에서 ISession 개체를받습니다. IRepository 객체가 생성되면이를 수신합니다.
내 코드 :
public interface IProductsRepository
{
IQueryable<Product> Products { get; }
void SaveProduct(Product product);
}
public class MySqlProductsRepository : IProductsRepository
{
private readonly ISession _session;
public MySqlProductsRepository(ISession session)
{
_session = session;
}
public IQueryable<Product> Products
{
get
{
return _session.CreateCriteria(typeof (Product)).List<Product>().AsQueryable();
}
}
public class BootStrapper
{
public static ISessionFactory SessionFactory = CreateSessionFactory();
private static ISessionFactory CreateSessionFactory()
{
var cfg = new Configuration().Configure(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "nhibernate.config"));
cfg.SetProperty(NHibernate.Cfg.Environment.ConnectionStringName, System.Environment.MachineName);
NHibernateProfiler.Initialize();
return cfg.BuildSessionFactory();
}
public static ISession GetSession()
{
return SessionFactory.GetCurrentSession();
}
}
public class AdminController : Controller
{
private readonly IProductsRepository _productsRepository;
public AdminController(IProductsRepository productsRepository)
{
_productsRepository = productsRepository;
}
}
public class NinjectControllerFactory : DefaultControllerFactory
{
private readonly IKernel _kernel = new StandardKernel(new DaisyBlossomsServices());
protected override IController GetControllerInstance(System.Web.Routing.RequestContext requestContext, Type controllerType)
{
if (controllerType == null)
return null;
return (IController) _kernel.Get(controllerType);
}
public class DaisyBlossomsServices : NinjectModule
{
public override void Load()
{
Bind<IProductsRepository>().To<MySqlProductsRepository>();
}
}
}
가 어떻게이 ISession은 그것의 생성자에 대한 ISession 개체의 수신을 MySqlProductsRepository에 결합 않고, 어떻게 그렇게 내 컨트롤러가 생성자에 IProductsRepository를 수신 결합합니까?