[英]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.