Ninject:将私有成员作为构造函数参数传递

发布于 2024-12-11 02:15:51 字数 1209 浏览 6 评论 0原文

我将 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

不爱素颜 2024-12-18 02:15:51

我不是100%明白你的问题是什么。

但是,如果您只想在整个应用程序中使用 IParisConnectionStringBuilder 的单个实例,请考虑在 NInject 中注册为单例。

语法类似于:

Bind<IParisConnectionStringBuilder>().To<ParisConnectionStringBuilder>().InSingletonScope();

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:

Bind<IParisConnectionStringBuilder>().To<ParisConnectionStringBuilder>().InSingletonScope();
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文