私はAutofacを使用しようとしましたIRegistrationSource
他のインタフェースを解決しましたが、動作しません。私のコードは以下の通りです:Autofac、MakeGenericMethod.Invoke not working
public class SettingsSource : IRegistrationSource
{
static readonly MethodInfo BuildMethod = typeof(SettingsSource).GetMethod(
"BuildRegistration",
BindingFlags.Static | BindingFlags.NonPublic);
public IEnumerable<IComponentRegistration> RegistrationsFor(
Service service,
Func<Service, IEnumerable<IComponentRegistration>> registrations)
{
var ts = service as TypedService;
if (ts != null && typeof(ISettings).IsAssignableFrom(ts.ServiceType))
{
var buildMethod = BuildMethod.MakeGenericMethod(ts.ServiceType);
yield return (IComponentRegistration)buildMethod.Invoke(null, null);
}
}
static IComponentRegistration BuildRegistration<TSettings>()
where TSettings : ISettings, new()
{
return RegistrationBuilder
.ForDelegate((c, p) =>
{
return c.Resolve<ISettingService>().LoadSetting<TSettings>();
})
.InstancePerLifetimeScope()
.CreateRegistration();
}
public bool IsAdapterForIndividualComponents { get { return false; } }
}
プライベートメソッドc.Resolve()。LoadSetting()は起動できません。
迷惑リンクを確認しても、その理由を理解できません。 Autofac. How to use custom method(property) to resolve some interface?
http://nblumhardt.com/2010/01/declarative-context-adapters-autofac2/
誰もが手掛かりを与えることができますか?
ありがとうございました
あなたが提供するコードは、nopcommerceの設定プロバイダの登録の逐語的なコピーです。したがって、意図したとおりに動作することを確認することができます。そうしないと、設定をまったく使用できなくなります。あなたは何をしようとしているのですか? –
ありがとうMarco、はい、それはnopcommerceからです。 nopcommerceのようなシステム設定フレームワークを実装したい。すべての設定はISettingServiceによって操作され、システムの起動時に登録されます。しかし、私はforlegateの私的な機能が解雇されていないことが分かった。 – LLI
登録ソースを登録しましたか?最初に、RegistrationsForメソッドをデバッグして、ISettingsを継承するクラスを解決するときに、それが呼び出されていることを確認し、yield return句を実行する必要があります。ブレークポイントを設定する必要があります。 –