c# - 如何使这个控制器的类和构造函数可重用?
问题描述
public class AccountsMstController : Controller
{
private AccountsMstRepository _AccountsMstRepository;
public ErpOneLogRepository _ErpOneLogRepository;
private DeleteRecordRepository _DeleteRecordRepository;
private IHttpContextAccessor _contextAccessor;
private HttpContext _context;
private string username;
private IHostingEnvironment _env;
private string user;
private string dbname;
public AccountsMstController(IHttpContextAccessor contextAccessor,
IHostingEnvironment env)
{
_contextAccessor = contextAccessor;
_context = _contextAccessor.HttpContext;
username = _context.User.Identity.Name;
_env = env;
string[] Split = username.Split(new char[] { '@', '.' });
dbname = Convert.ToString(Split[1]);
user = Convert.ToString(Split[0]);
_AccountsMstRepository = new AccountsMstRepository(dbname);
_DeleteRecordRepository = new DeleteRecordRepository(dbname);
_ErpOneLogRepository = new ErpOneLogRepository(dbname);
}
}
试图使此代码可重用,并且可以通过函数指针调用,因为它在每个 Controller 的类和构造函数中使用。我试图在一个可以传递动态参数并且可以从不同类调用的单一方法中实现这一点。
解决方案
我将从使用界面开始:
public interface IController {
HttpContext Context{get; set; }
string Username {get; set; }
IHostingEnvironment Environment {get; set; }
string User {get; set; }
string DbName {get; set; }
UnitOfWork ControllerWork {get; set;}
}
假设存储库包含一个 DbContext 对象,您可以使用 Repository - UnitOfWork 模式
public interface UnitOfWorkFactory {
AccountsMstRepository AccountsMstRepository {get; set;}
ErpOneLogRepository ErpOneLogRepository get; set;}
DeleteRecordRepository DeleteRecordRepository {get; set;}
DbContext DbContext {get; set;}
// CRUD methods to update repository
}
public interface RepositoryFactory {
DbContext context {get; set;}
// CRUD methods to update repository
}
这样每个不同的控制器都可以实现 IController 接口,因此您可以使用中间 UnitOfWork 访问每个控制器上的存储库(您需要创建一个实现此的类)
如果您想让它更加可重用并且您正在使用实体框架,您可以使用 BaseModel 并使用基本类型 T 实现 RepositoryFactory,这样您的 UnitOfWorkFactory 就不会变得混乱。但为此,这没关系。
这是该模式的链接:microsoft-uow 模式实现
希望已经回答了你的问题。
约阿希姆。
推荐阅读
- flutter - 集团图书馆状态
- javascript - 移除对 React 代码中顺序 id 值的依赖
- python - 如何使用 BeautifulSoup 抓取评论的“查看”计数?
- node.js - Nuxt 每隔几分钟就崩溃一次
- flutter - 无法在 Visual Studio Code 中以颤振颜色删除断点
- android - android webview 中的 Django csrf 验证失败。android webview 无法验证 django csrf 令牌
- python - Python - 区分相似的图像
- bison - 野牛移位/减少与平衡括号语法的冲突
- ssas - SSAS 计算成员中的 MDX 查询
- file-upload - 空帖子值:CodeIgniter