首页 > 解决方案 > 为什么存储库为空

问题描述

我正在制作一个 API,我正在制作 API 调用。
我创建了一个名为IPartnerRepository
When I run my call 它给出了 nullexception 错误的存储库。
当我调试我的代码时,我看到它IPartnerRepository是空的。
我的视觉工作室没有显示任何错误或输入错误。
为什么我的程序找不到那个存储库呢?为什么它是空的?

这是我的代码:

public IPartnerRepository PartnerRepository { get; set; } // = null

[RequiresAnyRole(Roles.superadmin, Roles.admin)]
public async Task<PartnerListResponse> Get(PartnerListRequest request)
{
   var items = await PartnerRepository.GetAllAsync();
   return new PartnerListResponse
   {
      Items = items
   };
}

IPartner 存储库

using System;
using DTO = Ringdesk.Api.ServiceModel.DTO;

namespace Ringdesk.Api.ServiceModel.Interfaces
{
   public interface IPartnerRepository : IDtoRepository<DTO.Partner, 
      DTO.PartnerForInsert, DTO.PartnerForUpdate>
   {
   }
}

合作伙伴.cs

using ServiceStack.Model;
using Ringdesk.Api.ServiceModel.Attributes;

namespace Ringdesk.Api.ServiceModel.DTO
{
    public class Partner : IHasId<int>
    {
        public int Id { get; set; }
        public string Guid { get; set; }
        [PropertyValue("name")]
        public string Name { get; set; }
    }

    public class PartnerForUpdate : IHasId<int>
    {
        public int Id { get; set; }
        public string Name { get; set; }
    }

    public class PartnerForInsert
    {
        public string Name { get; set; }    
    }
}

与客户的工作代码

出错的合作伙伴代码

启动.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using ServiceStack;
using Ringdesk.Api.Web.Jobs;
using NLog.Extensions.Logging;
using NLog.Web;

namespace Ringdesk.Api.Web
{
    public class Startup
    {
        public Startup(IConfiguration configuration)
        {
            Configuration = configuration;
        }

        public IConfiguration Configuration { get; }

        public void ConfigureServices(IServiceCollection services)
        {
            services.AddOrchardCms();
            //services.AddMvc();
        }

        public class StartupSettings
        {
            public bool RunJobs { get; set; }
        }

        public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory, IApplicationLifetime lifetime)
        {
            var startupSettings = Configuration.GetSection("startupSettings").Get<StartupSettings>();

            if (startupSettings == null || startupSettings.RunJobs)
            {
                var quartz = new QuartzSetup();
                lifetime.ApplicationStarted.Register(quartz.Start);
                lifetime.ApplicationStopping.Register(quartz.Stop);
            }

            loggerFactory.AddConsole(Configuration.GetSection("Logging"));
            loggerFactory.AddNLog();
            env.ConfigureNLog("nlog.config");
            loggerFactory.AddDebug();

            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }
            else
            {
                app.UseExceptionHandler("/Home/Error");
            }

            app.UseStaticFiles();
            var appSettings = new NetCoreAppSettings(Configuration);
            app.UseServiceStack(new AppHost(appSettings));
            app.UseOrchardCore();

            //app.UseMvc(routes =>
            //      {
            //        routes.MapRoute(
            //            name: "default",
            //            template: "{controller=Home}/{action=Index}/{id?}");
            //      });
        }
    }
}

标签: c#asp.net-core

解决方案


通过将 PartnerRepository 添加到服务模块,我修复了它!

container.RegisterAs<PartnerRepository, IPartnerRepository>();
container.Register<IDtoRepository<Db.PartnerProperty, Db.PartnerProperty, Db.PartnerProperty>>(c =>
{
   var repository = new DtoRepository<Db.PartnerProperty, Db.PartnerProperty, Db.PartnerProperty, Db.PartnerProperty>();
   c.AutoWire(repository);
   return repository;
});

这已经存在CustomerRepository

就像@Croxy 说我忘了给CustomerRepository里面赋值ServiceModule


推荐阅读