使用构造函数来注入来自AssembliesInPath的负载

问题描述

|| 如果我说有这样的代码
    private static void LoadFromAssemblies(IKernel kernel)
    {
        string appPath = HttpContext.Current.Request.MapPath(HttpContext.Current.Request.ApplicationPath);

        kernel.Scan(a =>
        {
            a.FromAssembliesInPath(string.Format(@\"{0}\\Extensions\",appPath));
            a.AutoLoadModules();
            a.BindWithDefaultConventions();
            a.InRequestScope();
        });
    }
并假设目标程序集中定义的每个类在构造函数中都有一个字符串参数,我该如何从上面的代码中传递字符串参数? 我会改用拦截器吗? 预先感谢,约翰     

解决方法

在我的项目到某些存储库中,我将ISession(nHibernate)和其他传递给DataContext(Linq2SQL)的connectionString 为了传递连接字符串,我创建了LinqConfiguration类
public class LinqConfiguration : ILinqConfiguration
{
    private readonly string _connectionString;

    public LinqConfiguration(string connectionString)
    {
        _connectionString = connectionString;
    }

    public string GetConnectionString()
    {
        return _connectionString;
    }
}
我的存储库如下所示:
   public class WebClientRepository : IWebClientRepository
    {
        private readonly WebClientDataClassesDataContext datacontext;
        private ILinqConfiguration _linqconfig;


        public WebClientRepository(ILinqConfiguration linqconfig)
        {

                _linqconfig = linqconfig;
                datacontext = new WebClientDataClassesDataContext(_linqconfig.GetConnectionString());
        }

    //....
    }
并使用约定进行约束:
public class LinqRepositoryModule: NinjectModule
    {
        public override void Load()
        {
            Bind<ILinqConfiguration>()
            .To<LinqConfiguration>()
            .WithConstructorArgument(\"connectionString\",ConfigurationManager.ConnectionStrings[\"ApplicationServices\"].ConnectionString
            );

            IKernel ninjectKernel = this.Kernel;

            ninjectKernel.Scan(kernel =>
            {
                kernel.FromAssemblyContaining<IWebClientRepository>();
                kernel.FromAssemblyContaining<WebClientRepository>();
                kernel.Where(t => t != typeof(LinqConfiguration)); // interface is in the same assembly and it is already binded
                kernel.BindWithDefaultConventions();
                kernel.AutoLoadModules();
                kernel.InRequestScope();
            });

        }
    }
    

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...