0

ConverterTestクラスにアクセスする必要があるクラスがありますValidateTest。抽象クラスでValidateTestあるため、コンストラクターを使用して渡すことはできません。ConverterTestバインドする 2 番目のコンストラクターを導入するValidateTestと、派生クラスで多くの問題が発生し、多くのことを変更する必要があります。ValidateTestそのためConverterTest、プロパティ注入 (inject 属性で装飾) を使用して渡そうとしConverterTestましたが、Ninject によって作成されず、inject プロパティが無視されるため、これも機能しません。そのため、インスタンス プロパティをValidateTestクラス内に直接作成し、それ自体のインスタンスをバインドすることにしました。クラスValidateTest内のインスタンスを取得するには、 を使用します。すべて正常に動作しますが、インスタンス クラスへのアクセスに使用することをお勧めしますか? 他の解決策はありますか?ConverterTestkernel.Get<ValidateTest>().Instancekernel.Get

public class ValidateTest
{

        private readonly ISettingsRepository _settingsRepository;

        [Inject]
        public ValidateTest Instance { get; set; }

        public ValidateTest(ISettingsRepository settingsRepository)
        {
            _settingsRepository = settingsRepository;            
        }
}

バインディング

kernel.Bind<ISettingsRepository>().To<SettingsRepository>();
kernel.Bind<ValidateAbuse>().ToSelf().InSingletonScope();

コンストラクターのバインドが不可能で、プロパティのバインドが機能していない抽象クラスでValidateTest使用するインスタンスを取得しています。kernel.Get

public abstract class ConverterTest
{

        public void Execute()
        {
          NinjectHelper.kernel.Get<ValidateTest>().Instance
        }
}
4

1 に答える 1

1

ConverterTestConverterTest の公開されたプロパティまたは独自のコンストラクターを介して ValidateTest を設定するサブクラスを持たないのはなぜですか?

public abstract class ConverterTest
{
     protected ValidateTest ValidateTest{get;set;}

     public void Execute()
     {
         ValidateTest.ValidateStuff();
     }
}

public class ConcreteConverter : ConverterTest
{
    [Inject]
    public ConcreteConverter(ValidateTest validateTest)
    {
        base.ValidateTest = validateTest;
    }
}

または、プロパティをパブリックpublic ValidateTest ValidateTest{get;set;} にして、適切な属性を追加すればプロパティ インジェクションが機能するはずだと思います。

public abstract class ConverterTest
{
     [Inject]
     public ValidateTest ValidateTest{get;set;}

     public void Execute()
     {
         ValidateTest.ValidateStuff();
     }
}
于 2012-04-17T14:18:31.900 に答える