Ninject:将私有成员作为构造函数参数传递
我将 Ninject 与 ASP.NET MVC 结合使用。基本上,我想将 BaseController 类中的受保护成员 _connectionStringBuilder 作为构造函数参数传递给类 SourceCodeManager。
我基本上在控制器级别进行一些处理,然后我想将其传递给我的各种业务层类,例如 SourceCodeManager。
我知道这听起来有点时髦,但我基本上想将相同的变量 _connectionStringBuilder 传递给我的所有业务层类。 (我正在尝试升级一个经典的 ASP 应用程序,他们将用户名和密码存储在 cookie 中!)
public class SourceCodeManager : ParisDataAccessManager, ISourceCodeManager
{
SourceCodeManager(IParisConnectionStringBuilder connectionStringBuilder)
: base(connectionStringBuilder)
{
}
public List<SourceCodeList> GetManualSourceCodes()
{
using (var connection = new SqlConnection(connectionStringManager.GetConnectionString()))
{
connection.Open();
var manualSourcesCodes = connection
.Query<SourceCodeList>("select source_cd, source_desc where feeder_system_cd = 'ME'")
.ToList();
return manualSourcesCodes;
}
}
}
public class BaseController : Controller
{
[Inject]
public IParisConnectionStringBuilder _connectionStringBuilder { get; set; }
// ...
}
I am using Ninject with ASP.NET MVC. Basically, I want to pass the protected member _connectionStringBuilder in the BaseController class as a constructor argument to the class SourceCodeManager.
I basically do some processing at the controller level and then I want to pass that to the my various Business layer classes like SourceCodeManager.
I know this sounds a bit funky, but I basically want to pass the same variable _connectionStringBuilder to all of my Business Layer classes.
(I am trying to upgrade a classic ASP application where they store the username and password in cookies!)
public class SourceCodeManager : ParisDataAccessManager, ISourceCodeManager
{
SourceCodeManager(IParisConnectionStringBuilder connectionStringBuilder)
: base(connectionStringBuilder)
{
}
public List<SourceCodeList> GetManualSourceCodes()
{
using (var connection = new SqlConnection(connectionStringManager.GetConnectionString()))
{
connection.Open();
var manualSourcesCodes = connection
.Query<SourceCodeList>("select source_cd, source_desc where feeder_system_cd = 'ME'")
.ToList();
return manualSourcesCodes;
}
}
}
public class BaseController : Controller
{
[Inject]
public IParisConnectionStringBuilder _connectionStringBuilder { get; set; }
// ...
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
我不是100%明白你的问题是什么。
但是,如果您只想在整个应用程序中使用 IParisConnectionStringBuilder 的单个实例,请考虑在 NInject 中注册为单例。
语法类似于:
I'm not 100% I understand what your question is.
However, if you only want a single instance of IParisConnectionStringBuilder in your whole application, look at registering as a singleton in NInject.
Syntax is something like: