【发布时间】:2017-07-06 16:57:48
【问题描述】:
我有一个用于命令/查询处理程序的抽象基类:
public abstract class AbstractBusiness<TRequest, TResult> : IBusiness<TRequest, TResult>
where TResult : BaseResponse
{
public TResult Send(TRequest request)
{
TResult response = Activator.CreateInstance<TResult>();
response.Success = true;
try
{
IConnectionProvider connectionProvider =
ServiceLocator.Current.GetInstance<IConnectionProvider>();
using (DatabaseScope scope = DatabaseScopeManager.Instance.GetScope(
connectionProvider,
DatabaseScopeType.UseExistingOrNewTX,
IsolationLevel.ReadCommitted))
{
response = this.Handle(request);
scope.Complete();
}
}
catch (Exception exc)
{
response.Success = false;
response.Message = exc.Message;
}
return response;
}
protected abstract TResult Handle(TRequest request);
}
它是这样使用的:
public sealed class AccountCreateBusiness
: AbstractBusiness<AccountCreateRequest, AccountCreateResponse>
{
private readonly IMessageProvider messageProvider;
public AccountCreateBusiness(IMessageProvider messageProvider)
{
this.messageProvider = messageProvider;
}
protected override AccountCreateResponse Handle(AccountCreateRequest request)
{
//handle request
}
}
我正在尝试摆脱基类中的ServiceLocator。有没有办法注入IConnectionProvider 而不必更改所有派生类以在其构造函数中包含IConnectionProvider 并调用: base(connectionProvider)?我无法更改DatabaseScopeManager。
【问题讨论】:
标签: .net dependency-injection inversion-of-control service-locator