Web API如何在调用之间使库中的对象保持活动状态

时间:2018-08-20 15:20:56

标签: c# object asp.net-web-api controller

我有一个Wince应用程序,该应用程序与服务进行通信,该服务通过DB执行自己的业务逻辑。

我想保留应用程序中的当前代码并在Web Api项目中实现。

我创建了控制器,在其中使用Wince应用程序中的旧代码。但是要执行此代码,我需要一个连接对象,该连接对象使我能够连接到上述服务。

此通信类位于Web Api中引用的dll中。 它称为FastyMobile.Core.dll 该类称为Instance。它具有Create属性和public static void Create(DatabaseType mainDatabase, DataProviderParams ConnectionParams) { if (_instance != null) _instance.Dispose(); _instance = new CommunicationManager(mainDatabase, ConnectionParams); } 方法。

[ServiceBehavior(ConcurrencyMode = ConcurrencyMode.Multiple, InstanceContextMode = InstanceContextMode.Single)]
public static class Helper
{
    private static CommunicationManager _manager { get; set; }
    public static CommunicationManager GetCommunicationManager
    {
        get { if (_manager == null) Init(); return _manager; }
    }

    private static void Init()
    {
        Network.CreateCommunicationLayer(
            AppSettings.MainDatabaseType,
            PluginInfo.GLOBAX_USERNAME,
            PluginInfo.GLOBAX_PASSWORD,
            false);

        _manager = CommunicationManager.Instance;
    }
}

此后,我有 CommunicationManager.Instance 用于通信。

我想找到一种在首次创建实例后保留该实例的方法。

在每次调用控制器后,在我所有的尝试之后, CommunicationManager.Instance 也被部署。

我尝试过的是: -在控制器中创建静态变量, -创建单独的静态类,在其中我使用单例保留实例,

[EnableCors(origins: "*", headers: "*", methods: "*")]
[RoutePrefix("api/transfers")]
public class TransfersController : ApiController
{
    private static List<InternalTransfersData> transfersList = new List<InternalTransfersData>();
    CommunicationManagerRepository _repository = new CommunicationManagerRepository();

    [HttpGet]
    public HttpResponseMessage Get()
    {
        Helper.GetCommunicationManager;

        InternalTransfersUndoneBusiness business = new InternalTransfersUndoneBusiness();
        transfersList = business.GetUnprocessedInternalTransfers(InternalTransferDocTypes.InternalTransferType2);


        var Data = new { transfers = transfersList.ToArray() };

        return Request.CreateResponse(HttpStatusCode.OK, Data);
    }

//

CommunicationManager.Instance
  • 我在存储库中使用了依赖项注入,在该存储库中,我只尝试创建一次raymond james warren buffett ernest giles william blair ,然后从存储库类中的静态字段返回值。

在每次通话中,所有静态字段均为空。

0 个答案:

没有答案