Commit d97f1f7f authored by Savorboard's avatar Savorboard

optimizing publisher interface

parent 0f146b81
...@@ -36,22 +36,20 @@ namespace DotNetCore.CAP.Abstractions ...@@ -36,22 +36,20 @@ namespace DotNetCore.CAP.Abstractions
return PublishWithTransAsync(name, content); return PublishWithTransAsync(name, content);
} }
public void Publish<T>(string name, T contentObj, IDbConnection dbConnection, public void Publish<T>(string name, T contentObj, IDbTransaction dbTransaction, string callbackName = null)
string callbackName = null, IDbTransaction dbTransaction = null)
{ {
CheckIsAdoNet(name); CheckIsAdoNet(name);
PrepareConnectionForAdo(dbConnection, dbTransaction); PrepareConnectionForAdo(dbTransaction);
var content = Serialize(contentObj, callbackName); var content = Serialize(contentObj, callbackName);
PublishWithTrans(name, content); PublishWithTrans(name, content);
} }
public Task PublishAsync<T>(string name, T contentObj, IDbConnection dbConnection, public Task PublishAsync<T>(string name, T contentObj, IDbTransaction dbTransaction, string callbackName = null)
string callbackName = null, IDbTransaction dbTransaction = null)
{ {
CheckIsAdoNet(name); CheckIsAdoNet(name);
PrepareConnectionForAdo(dbConnection, dbTransaction); PrepareConnectionForAdo(dbTransaction);
var content = Serialize(contentObj, callbackName); var content = Serialize(contentObj, callbackName);
...@@ -69,16 +67,22 @@ namespace DotNetCore.CAP.Abstractions ...@@ -69,16 +67,22 @@ namespace DotNetCore.CAP.Abstractions
protected virtual string Serialize<T>(T obj, string callbackName = null) protected virtual string Serialize<T>(T obj, string callbackName = null)
{ {
var packer = (IMessagePacker)ServiceProvider.GetService(typeof(IMessagePacker)); var packer = (IMessagePacker)ServiceProvider.GetService(typeof(IMessagePacker));
string content;
string content = string.Empty; if (obj != null)
if (Helper.IsComplexType(obj.GetType()))
{ {
var serializer = (IContentSerializer)ServiceProvider.GetService(typeof(IContentSerializer)); if (Helper.IsComplexType(obj.GetType()))
content = serializer.Serialize(obj); {
var serializer = (IContentSerializer)ServiceProvider.GetService(typeof(IContentSerializer));
content = serializer.Serialize(obj);
}
else
{
content = obj.ToString();
}
} }
else else
{ {
content = obj?.ToString(); content = string.Empty;
} }
var message = new CapMessageDto(content) var message = new CapMessageDto(content)
...@@ -91,20 +95,15 @@ namespace DotNetCore.CAP.Abstractions ...@@ -91,20 +95,15 @@ namespace DotNetCore.CAP.Abstractions
#region private methods #region private methods
private void PrepareConnectionForAdo(IDbConnection dbConnection, IDbTransaction dbTransaction) private void PrepareConnectionForAdo(IDbTransaction dbTransaction)
{ {
DbConnection = dbConnection ?? throw new ArgumentNullException(nameof(dbConnection)); DbTransaction = dbTransaction ?? throw new ArgumentNullException(nameof(dbTransaction));
DbConnection = DbTransaction.Connection;
if (DbConnection.State != ConnectionState.Open) if (DbConnection.State != ConnectionState.Open)
{ {
IsCapOpenedConn = true; IsCapOpenedConn = true;
DbConnection.Open(); DbConnection.Open();
} }
DbTransaction = dbTransaction;
if (DbTransaction == null)
{
IsCapOpenedTrans = true;
DbTransaction = dbConnection.BeginTransaction(IsolationLevel.ReadCommitted);
}
} }
private void CheckIsUsingEF(string name) private void CheckIsUsingEF(string name)
......
...@@ -39,21 +39,17 @@ namespace DotNetCore.CAP ...@@ -39,21 +39,17 @@ namespace DotNetCore.CAP
/// </summary> /// </summary>
/// <param name="name">the topic name or exchange router key.</param> /// <param name="name">the topic name or exchange router key.</param>
/// <param name="contentObj">message body content, that will be serialized of json.</param> /// <param name="contentObj">message body content, that will be serialized of json.</param>
/// <param name="callbackName">callback subscriber name</param>
/// <param name="dbConnection">the connection of <see cref="IDbConnection" /></param>
/// <param name="dbTransaction">the transaction of <see cref="IDbTransaction" /></param> /// <param name="dbTransaction">the transaction of <see cref="IDbTransaction" /></param>
Task PublishAsync<T>(string name, T contentObj, IDbConnection dbConnection, string callbackName = null, /// <param name="callbackName">callback subscriber name</param>
IDbTransaction dbTransaction = null); Task PublishAsync<T>(string name, T contentObj, IDbTransaction dbTransaction, string callbackName = null);
/// <summary> /// <summary>
/// (ado.net) Publish a object message. /// (ado.net) Publish a object message.
/// </summary> /// </summary>
/// <param name="name">the topic name or exchange router key.</param> /// <param name="name">the topic name or exchange router key.</param>
/// <param name="contentObj">message body content, that will be serialized of json.</param> /// <param name="contentObj">message body content, that will be serialized of json.</param>
/// <param name="callbackName">callback subscriber name</param>
/// <param name="dbConnection">the connection of <see cref="IDbConnection" /></param>
/// <param name="dbTransaction">the transaction of <see cref="IDbTransaction" /></param> /// <param name="dbTransaction">the transaction of <see cref="IDbTransaction" /></param>
void Publish<T>(string name, T contentObj, IDbConnection dbConnection, string callbackName = null, /// <param name="callbackName">callback subscriber name</param>
IDbTransaction dbTransaction = null); void Publish<T>(string name, T contentObj, IDbTransaction dbTransaction, string callbackName = null);
} }
} }
\ No newline at end of file
...@@ -124,7 +124,7 @@ namespace DotNetCore.CAP.Test ...@@ -124,7 +124,7 @@ namespace DotNetCore.CAP.Test
throw new NotImplementedException(); throw new NotImplementedException();
} }
public void Publish<T>(string name, T contentObj, IDbConnection dbConnection, string callbackName = null, IDbTransaction dbTransaction = null) public void Publish<T>(string name, T contentObj, IDbTransaction dbTransaction, string callbackName = null)
{ {
throw new NotImplementedException(); throw new NotImplementedException();
} }
...@@ -159,7 +159,7 @@ namespace DotNetCore.CAP.Test ...@@ -159,7 +159,7 @@ namespace DotNetCore.CAP.Test
throw new NotImplementedException(); throw new NotImplementedException();
} }
public Task PublishAsync<T>(string name, T contentObj, IDbConnection dbConnection, string callbackName = null, IDbTransaction dbTransaction = null) public Task PublishAsync<T>(string name, T contentObj, IDbTransaction dbTransaction, string callbackName = null)
{ {
throw new NotImplementedException(); throw new NotImplementedException();
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment