当谈到 DI 和 ninject 时,我是一个新手,我正在为实际注射应该何时发生以及如何开始绑定而苦苦挣扎。
我已经在我的 Web 应用程序中使用它并且在那里工作正常,但现在我想在类库中使用注入。
假设我有这样的课程:
public class TestClass
{
[Inject]
public IRoleRepository RoleRepository { get; set; }
[Inject]
public ISiteRepository SiteRepository { get; set; }
[Inject]
public IUserRepository UserRepository { get; set; }
private readonly string _fileName;
public TestClass(string fileName)
{
_fileName = fileName;
}
public void ImportData()
{
var user = UserRepository.GetByUserName("myname");
var role = RoleRepository.GetByRoleName("myname");
var site = SiteRepository.GetByID(15);
// Use file etc
}
}
我想在这里使用属性注入,因为我需要在构造函数中传入一个文件名。我是否正确地说如果我需要传入构造函数参数,我不能使用构造函数注入?如果我可以使用带有附加参数的构造函数注入,我该如何传递这些参数?
我有一个由 Test 类使用的控制台应用程序,如下所示:
class Program
{
static void Main(string[] args)
{
// NinjectRepositoryModule Binds my IRoleRepository etc to concrete
// types and works fine as I'm using it in my web app without any
// problems
IKernel kernel = new StandardKernel(new NinjectRepositoryModule());
var test = new TestClass("filename");
test.ImportData();
}
}
我的问题是,当我调用test.ImportData()
我的存储库时,它们是空的 - 没有任何东西注入它们。我尝试创建另一个模块并调用
Bind<TestClass>().ToSelf();
因为我认为这可能会解决所有注入属性,TestClass
但我无处可去。
我确定这是一个微不足道的问题,但我似乎无法找到解决方法。