为ASP.NET创建OrmLite存储库基类

在那里面

我正在尝试创建一个可以在整个项目中使用的通用基类。我已经编写了一些代码,但在DbConnectionFactory上仍然得到NULL实例。

我创建了一个ASP.Net Web API项目并添加了AppHost文件。我将Funq与Simple Injector一起使用,以将我的自定义服务注入Api控制器。

AppHost.cs

public class AppHost : AppHostBase
{
    public AppHost() : base("Erp", typeof(AppHostService).Assembly)
    {
    }

    public override void Configure(Container container)
    {           
        // init
        var simpleInjectorContainer = new SimpleInjector.Container();
        var erpConnection = ConnectionStrings.ErpLocal;           
        var isLocal = HelperTools.IsLocalPath();

        // check
        if (isLocal)
        {
            erpConnection = ConnectionStrings.ErpOnline;               
        }

        // mvc
        ControllerBuilder.Current.SetControllerFactory(new FunqControllerFactory(container));

        // register funq services
        container.Register<IErpDbConnectionFactory>(c => new ErpDbConnectionFactory(erpConnectionString));      
        container.RegisterAutoWiredAs<CategoryService, ICategoryService>();
        container.RegisterAutoWiredAs<ManufacturerService, IManufacturerService >();
        container.RegisterAutoWiredAs<ProductService, IProductService>();
        container.RegisterAutoWiredAs<ProductAttributeService, IProductAttributeService>();
        container.RegisterAutoWiredAs<SpecificationAttributeService, ISpecificationAttributeService>();
        //...

        // simple injector services
        SimpleInjectorInitializer.Initialize(simpleInjectorContainer, isLocal);

        // register SimpleInjector IoC container, so ServiceStack can use it
        container.Adapter = new SimpleInjectorIocAdapter(simpleInjectorContainer);

    }
}

我正在尝试使用的基类

public abstract class ApiOrmLiteController : ApiController
{
    IDbConnection _erpDb;       

    public virtual IErpDbConnectionFactory ErpDbConnectionFactory { get; set; }       

    public virtual IDbConnection ErpDb => _erpDb ?? (_erpDb = ErpDbConnectionFactory.OpenDbConnection());      

    protected override void Dispose(bool disposing)
    {
        base.Dispose(disposing);
        _erpDb?.Dispose();            
    }
}

Web Api控制器

public class ShippingController : ApiOrmLiteController
{
    #region Fields

    private readonly IOrderService _orderService;
    private readonly IAddressService _addressService;
    private readonly ICustomerService _customerService;
    private readonly IPdfService _pdfService;
    private readonly IMessageService _messageService;
    private readonly ITranslationService _translationService;       

    #endregion Fields

    #region Ctor

    public ShippingController(IOrderService orderService, IAddressService addressService, ICustomerService customerService, IPdfService pdfService, IMessageService messageService, ITranslationService translationService)
    {

        _orderService = orderService;
        _addressService = addressService;
        _customerService = customerService;
        _pdfService = pdfService;
        _messageService = messageService;
        _translationService = translationService;            
    }

    #endregion Ctor

    [HttpGet]
    [System.Web.Http.Route("Test")]
    public void Test()
    {
        var products = ErpDb.Select<Category>();
    }
}
神话

您可能需要为Web API或MVC控制器使用构造函数注入,或者,您可以通过来访问ServiceStack IOC中的依赖项HostContext.TryResolve<T>,例如:

public virtual IDbConnection ErpDb => _erpDb ?? 
    (_erpDb = HostContext.TryResolve<IErpDbConnectionFactory>().OpenDbConnection());

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章