当我试图访问数据库的代码时,我得到一个空引用异常。为什么我的Funq容器无法正常工作?
这是在global.asax中,我已经加入了调试器,并且正在执行此代码。
public class MvcApplication : System.Web.HttpApplication
{
public class DmsAppHost : AppHostBase
{
public DmsAppHost() : base("API", typeof(AppUsersService).Assembly) { }
public override void Configure(Funq.Container container)
{
var dbConnectionFactory = new OrmLiteConnectionFactory("Server=localhost;Port=5432;User Id=dms; Password=dms; Database=dms", PostgreSqlDialect.Provider);
container.Register<IDbConnectionFactory>(dbConnectionFactory);
container.RegisterAutoWiredAs<AppUserRepository, IAppUserRepository>();
}
}
protected void Application_Start()
{
new DmsAppHost().Init();
AreaRegistration.RegisterAllAreas();
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BootstrapSupport.BootstrapBundleConfig.RegisterBundles(System.Web.Optimization.BundleTable.Bundles);
}
}
当我打这个代码(使用(VAR DB = DbConnectionFactory.OpenDbConnection()))我得到一个NullReferenceException。
未将对象引用设置为对象的实例。
public class AppUserRepository : IAppUserRepository
{
public IDbConnectionFactory DbConnectionFactory { get; set; }
public AppUser GetAppUserByUsername(string username)
{
AppUser appUser;
using (var db = DbConnectionFactory.OpenDbConnection())
{
appUser = db.QuerySingle<AppUser>(new { username });
}
return appUser;
}
}
我该承担的东西是错误与我的连接或者是有什么我不这样做的权利,使Funq工作?
我也试过这与SqlLite并得到同样的问题。看起来Funq并没有创建我的DbConnectionFactory实例。 – 2013-04-05 19:29:52
在这里你调用'DbConnectionFactory.OpenDbConnection()'我看不到你在哪里实际上'创建连接'我在这里忽略了一些东西 – MethodMan 2013-04-05 19:30:34
它应该由Funq(IOC容器)在global.asax上面的文件。至少这是我理解它的工作原理。 – 2013-04-05 19:53:29