【发布时间】:2010-11-20 15:43:01
【问题描述】:
我是 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 中的所有注入属性,但我无处可去。
我确定这是一个微不足道的问题,但我似乎无法找出答案 如何解决这个问题。
【问题讨论】:
标签: dependency-injection ninject