私は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()
、リポジトリを null と呼んだときに、リポジトリに何も注入されていないことです。別のモジュールを作成して呼び出してみました
Bind<TestClass>().ToSelf();
これですべての注入プロパティが解決されると思ったのTestClass
ですが、どこにも行きません。
これは些細な問題だと確信していますが、どうすればいいのかわかりません。