我在尝试解决我的存储库时遇到错误。
可以使用可用的服务和参数调用在类型上找到“公共绑定标志”的构造函数: 无法解析构造函数'Void .ctor(Repository.Data.INHibernateSession)'的参数'Repository.Data.INHibernateSession nHibernateSession'。
Global.asax中
builder.RegisterAssemblyTypes(assembly).Where(t => typeof(IDependency).IsAssignableFrom(t)).
AsImplementedInterfaces().InstancePerLifetimeScope();
builder.RegisterAssemblyTypes(assembly).Where(t => typeof(ISingletonDependency).IsAssignableFrom(t)).
AsImplementedInterfaces().SingleInstance();
builder.RegisterAssemblyTypes(assembly).Where(t => typeof(ITransientDependency).IsAssignableFrom(t)).
AsImplementedInterfaces().InstancePerDependency();
builder.RegisterGeneric(typeof(Repository<>)).As(typeof(IRepository<>)).InstancePerDependency();
然后我有我的单身工厂
public interface INhibernateFactory : ISingletonDependency
{
ISessionFactory SessionFactory { get; }
}
然后是我的每生命实例
public interface INHibernateSession : IDependency
{
ISession Session { get; }
}
public class NHibernateSession : IDependency
{
private ISession _session;
private readonly ISessionFactory _sessionFactory;
public NHibernateSession(ISessionFactory sessionFactory)
{
_sessionFactory = sessionFactory;
}
然后在我的Generic存储库中
public class Repository<T> : IRepository<T> where T : class
{
private readonly INHibernateSession _nHibernateSession;
public Repository(INHibernateSession nHibernateSession)
{
_nHibernateSession = nHibernateSession;
}
public ISession Session
{
get { return _nHibernateSession.Session; }
}
似乎我正在做的就是创建一个单例,将其注入会话,然后注入存储库。 (我所有其他依赖项工作正常)
感谢有人能指出我正确的方向,为什么这不会解决,我很难过?
答案 0 :(得分:3)
你得到的错误自己说话,他们陈述了一些无法解决的类型。在您最近的更改之后,这是缺少的“ISessionFactory”界面。
进一步阐述:当前的问题是Autofac在被要求构建NHibernateSession
个实例时,不知道如何提供ISessionFactory
实例。要“学习”容器如何构建会话工厂,仅提供NHibernateFactory
实例是不够的。考虑这个注册:
builder.RegisterType<NhibernateFactory>().As<INhibernateFactory>().SingleInstance();
builder.Register(c => c.Resolve<INhibernateFactory>().SessionFactory);
最后一行注册了一个知道如何提供会话工厂实例的lambda。
您需要为容器提供所涉及的每种类型。使用“no constructors ...”错误来查看缺少哪些类型。
要进一步深入了解Autofac和NHibernate,你必须在网上搜索。例如。这个问题讨论了NHibernate会话: Managing NHibernate ISession with Autofac
答案 1 :(得分:0)
我不熟悉AutoFac;但你的NHibernateSession类是否必须实现你的INHibernateSession接口才能正确解析?
马特