繁体   English   中英

具有构造函数的依赖注入不起作用

[英]Dependency injection with constructor not working

我有以下代码

SmtpSection smtpsection = 
       (SmtpSection)ConfigurationManager.GetSection("system.net/mailSettings/smtp");

EmailSettings emailSettings = new EmailSettings
        {
            WriteAsFile = bool.Parse(ConfigurationManager.AppSettings[""] ?? "false"),
            ServerPort = smtpsection.Network.Port,
            Username = smtpsection.Network.UserName,
            Password = smtpsection.Network.Password,
            UseSsl = smtpsection.Network.EnableSsl
        };

kernel.Bind<IEmailRepository>().To<EmailRepository>().WithConstructorArgument("settings", emailSettings);

public class EmailSettings 
{
        public string MailToAddress = "test@Test.com";
        public string MailFromAddress = "test@test.com";
        public bool UseSsl = true;
        public string Username = "";
        public string Password = "";
        public string ServerName = "";
        public int ServerPort = 587;
        public bool WriteAsFile = false;
        public string FileLocation = @"C:\sports_store_emails";
}

public class EmailController : Controller
{
        private IEmailRepository emailRepository;
        private EmailSettings emailSettings;

        public EmailController(IEmailRepository emailRepository, EmailSettings settings)
        {
            this.emailRepository = emailRepository;
            this.emailSettings = settings;
        }
}

public class EmailRepository : RepositoryBase<EmailEnquiry>, IEmailRepository
{
    public EmailRepository(IDatabaseFactory databaseFactory)
        : base(databaseFactory)
    {
    }
}

public interface IEmailRepository : IRepository<EmailEnquiry>
{
}

public interface IRepository<T> where T : class
{
        void Add(T entity);
        void Update(T entity);
        void Delete(T entity);      
        void Delete(Expression<Func<T, bool>> where);
        T GetById(long Id);
        T GetById(string Id);
        T Get(Expression<Func<T, bool>> where);
        IEnumerable<T> GetAll();
        IEnumerable<T> GetMany(Expression<Func<T, bool>> where);
        IQueryable<T> SearchFor(Expression<Func<T, bool>> predicate);
}

由于某些原因,未传递NInject设置的参数。有人知道为什么会这样。 设置使用的是EmailSettings内部的所有值,而不是使用EmailSettings传递的值?

如果您已经为IDatabaseFactory配置了绑定,则可以将EmailRepository创建为

var emailRepository = kernel.Get<EmailRepository>();

更新

要初始化EmailController实例,您可以使用

var emailController =
          new EmailController(kernel.Get<EmailRepository>(), settings);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM