1

ASP .Net MVC 4 アプリで IoC に Autofac を使用しています。

依存関係を解決するときに、依存関係リゾルバーが異なるパラメーターに同じ値を渡す理由を理解できません。

登録方法は次のとおりです。

private void RegisterDependencyResolver()
{
    var builder = new ContainerBuilder();

    builder.RegisterControllers(Assembly.GetExecutingAssembly());

    builder.Register(x => new AESCryptographyService()).As<ICryptographyService>();
    builder.RegisterType<AppContext>().As<IContext>();

    IContainer container = builder.Build();
    DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
}

これが私が解決している方法ですIContext

var factory = _dependencyResolver.GetService<Func<string, string, string, IContext>>();
IContext context = factory(contextToken, hostUrl, request.Url.Authority);

これが私のものAppContextです:

internal class AppContext : IContext
{
    public AppContext(string contextToken, string hostUrl, string appUrl)
    {
        AppUrl = appUrl;
        HostUrl = hostUrl;
        ContextToken = contextToken;
    }

    public string AppUrl { get; private set; }

    public string ContextToken { get; private set; }

    public string HostUrl { get; private set; }
}

このスクリーンショットを見てください。、contextTokenhostUrlおよびrequest.Url.Authorityの値は異なりますが、すべての値のコンストラクターでAppContextの値に設定されますcontextToken


ここに画像の説明を入力

4

1 に答える 1

1

理解した!

これを置き換える必要がありました:

var factory = _dependencyResolver.GetService<Func<string, string, string, IContext>>();
IContext context = factory(contextToken, hostUrl, request.Url.Authority);

これとともに:

var context =
    _dependencyResolver.RequestLifetimeScope.Resolve<IContext>(
        new NamedParameter("contextToken", contextToken), 
        new NamedParameter("hostUrl", hostUrl),
        new NamedParameter("appUrl", request.Url.Authority));
于 2013-06-12T17:50:02.503 に答える