Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Autofac-在运行时解析参数_C#_Dependency Injection_Autofac - Fatal编程技术网

C# Autofac-在运行时解析参数

C# Autofac-在运行时解析参数,c#,dependency-injection,autofac,C#,Dependency Injection,Autofac,我有这个分层结构 namespace DataAccess public class SqlDataContext : ISqlDataContext { public SqlDataContext(string connectionString) { _connectionFactory = CreateConnection(connectionString); } } namespace Repositories public class U

我有这个分层结构

namespace DataAccess 

public class SqlDataContext : ISqlDataContext
{
    public SqlDataContext(string connectionString)
    {
        _connectionFactory = CreateConnection(connectionString);
    }
}


namespace Repositories

public class UserRepository : IUserRepository
{
    public UserRepository(ISqlDataContext dataContext)
    {
        _db = dataContext;
    }
}

namespace Core

public class UserManager :IUserManager
{
    public UserManager(UserRepository repository)
   {
        _userRepository = repository;
    }
}
然后我像这样在Autofac容器中注册它

        builder.Register((a, b) => new SqlDataContext(b.Named<string>("connectionString")))
            .As<ISqlDataContext>()
            .InstancePerLifetimeScope();

        builder.RegisterType<UserRepository>()
            .As<IUserRepository>()
            .WithParameter((x, o) => x.Name == "dataContext", (x, o) => o.Resolve<ISqlDataContext>());

        builder.RegisterType<UserManager>()
            .As<IUserManager>()
            .WithParameter((x, o) => x.Name == "userRepository", (x, o) => o.Resolve<IUserRepository>());
builder.Register((a,b)=>newsqldatacontext(b.Named(“connectionString”))
.As()
.InstancePerLifetimeScope();
builder.RegisterType()
.As()
.WithParameter((x,o)=>x.Name==“dataContext”,(x,o)=>o.Resolve());
builder.RegisterType()
.As()
.WithParameter((x,o)=>x.Name==“userRepository”,(x,o)=>o.Resolve());
然后我打电话给我的客户

      namespace Client

     internal void OnConnectionStringResolved() {

        var connectionString = GetConnectionString();

        var dbContext = DependencyResolver.Instance().Resolve<ISqlDataContext>(
            new NamedParameter("connectionString", connectionString)
            );

         var userRepository = 
             DependencyResolver.Instance().Resolve<IUserRepository>(
            new NamedParameter("dbContext", dbContext)
            );

        _userManager = DependencyResolver.Instance().Resolve<IUserManager>(
            new NamedParameter("userRepository", userRepository)
            );

       var user = _userManager.GetUser(userId);
     }
命名空间客户端
连接StringResolved()上的内部空洞{
var connectionString=GetConnectionString();
var dbContext=dependencyrolver.Instance().Resolve(
新名称参数(“connectionString”,connectionString)
);
var userRepository=
DependencyResolver.Instance().Resolve(
新命名参数(“dbContext”,dbContext)
);
_userManager=DependencyResolver.Instance().Resolve(
新名称参数(“userRepository”,userRepository)
);
var user=\u userManager.GetUser(userId);
}
我不想在我的客户端项目中引用DataAccess项目。但问题是ConnectionString只能在运行时解决

我在想我的客户的电话应该是这样的

       _userManager = DependencyResolver.Instance().Resolve<IUserManager>(GetConnectionString());
\u userManager=dependencyrolver.Instance().Resolve(GetConnectionString());

有什么办法吗?

为什么不创建一个可以在可接受点传入的选项接口?可能会有帮助。