簡體   English   中英

ServiceStack v4中服務的Db為空

[英]Service's Db is null in ServiceStack v4

我已經使用了免費版本的ServiceStack數年了,最近購買了v4以用於項目中。

我已經閱讀了發行說明和相關博客,但是找不到關於我遇到的問題的任何指導...

進行了發行說明中定義的所有相應更改后,我陷入了ServiceStack.Service.get_Db()上的NullReferenceException問題。 以下一些代碼片段可能會有所幫助:

Global.asax中...

using Funq;
using ServiceStack;
using ServiceStack.OrmLite;
using ServiceStack.Data;
using ServiceStack.Caching;
using ServiceStack.MiniProfiler;
using ServiceInterface;
using System.Web;
using System;

namespace WebRole
{
    public class AppHost : AppHostHttpListenerBase
    {
        public AppHost() : base("Web Services", typeof(CompaniesService).Assembly) { }

        public override void Configure(Container container)
        {
            container.Register(new OrmLiteConnectionFactory(@"Server=tcp:myServer.database.windows.net,1433;Database=myDatabase;User ID=myUser;Password=myPassword;Trusted_Connection=False;Encrypt=True;Connection Timeout=30;", SqlServerDialect.Provider));

            using (var resetCompanies = container.Resolve<ResetCompaniesService>())
            {
                resetCompanies.Any(null);
            }

ResetCompanies.cs ...

using System;
using System.Collections.Generic;
using ServiceStack.OrmLite;
using ServiceStack;
using ServiceModel.Types;

namespace ServiceInterface
{
    [Route("/reset-Companies", "GET,POST")]
    [Api("Resets the database back to the original Top 3 movies.")]
    public class ResetCompanies : IReturn<ResetCompaniesResponse>
    {
    }

    /// <summary>
    ///     Define your ServiceStack web service response (i.e. Response DTO).
    /// </summary>
    public class ResetCompaniesResponse
    {
    }



    /// <summary>
    ///     Create your ServiceStack rest-ful web service implementation.
    /// </summary>
    public class ResetCompaniesService : Service
    {
        public static List<Company> Top3Companies = new List<Company>
                                                   {
                                                       new Company
                                                           {
                                                               Code = "C1",
                                                               Name = "Company 1"
                                                           },
                                                       new Company
                                                           {
                                                               Code = "C2",
                                                               Name = "Company 2"
                                                           },
                                                       new Company
                                                           {
                                                               Code = "C3",
                                                               Name = "Company 3"
                                                           }
                                                   };

        public object Any(ResetCompanies request)
        {
            //Executes the specified delegate against the configured database.
            Db.DropAndCreateTable<Company>();
            Db.SaveAll(Top3Companies);

            return new ResetCompaniesResponse();
        }
    }
}

NullReferenceException發生在

Db.DropAndCreateTable<Company>();

這是堆棧跟蹤

at ServiceStack.Service.get_Db()
at ServiceInterface.ResetCompaniesService.Any(ResetCompanies request) in c:\Users\me\Documents\Visual Studio 2013\Projects\Project1\ServiceInterface\ResetCompanies.cs:line 51
at WebRole.AppHost.Configure(Container container) in c:\Users\me\Documents\Visual Studio 2013\Projects\Project1\WebRole\Global.asax.cs:line 23
at ServiceStack.ServiceStackHost.Init()
at WebRole.Global.Application_Start(Object sender, EventArgs e) in c:\Users\me\Documents\Visual Studio 2013\Projects\Project1\WebRole\Global.asax.cs:line 35

有人知道嗎? 當然,這看起來像是我錯過或未意識到的v4的另一個重大變化。

內置的Service希望解析一個IDbConnectionFactory ,您可以通過將OrmLiteConnectionFactory注冊為IDbConnectionFactory ,例如:

container.Register<IDbConnectionFactory>(c =>
    new OrmLiteConnectionFactory(connString, SqlServerDialect.Provider));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM