當我試圖訪問數據庫的代碼時,我得到一個空引用異常。爲什麼我的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