Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/354.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';s RegisterGeneric()方法?_C#_Asp.net_Asp.net Mvc_Autofac - Fatal编程技术网

C# 如何将动态参数与autofac';s RegisterGeneric()方法?

C# 如何将动态参数与autofac';s RegisterGeneric()方法?,c#,asp.net,asp.net-mvc,autofac,C#,Asp.net,Asp.net Mvc,Autofac,当前情况 我正在一个接一个地注册一些课程,所有课程都采用以下模式: builder.RegisterType<NpgsqlDapperRepository<Foo, int>>() .As<IDapperRepository<Foo, int>>() .WithParameter(new NamedParameter("connectionString", ConnectionStri

当前情况

我正在一个接一个地注册一些课程,所有课程都采用以下模式:

builder.RegisterType<NpgsqlDapperRepository<Foo, int>>()
                .As<IDapperRepository<Foo, int>>()
                .WithParameter(new NamedParameter("connectionString", ConnectionString))
                .WithParameter(new NamedParameter("tableName", "Foos"))
                .WithParameter(new NamedParameter("schema", "dbo"))
                .InstancePerLifetimeScope();
显然,这就是为什么我不需要注册100个实体,它们基本上具有完全相同的配置,只有1个参数不同

问题

我需要根据实体类型确定表名。使用
RegisterGeneric()
时如何获取类型?这可能吗

额外注意事项


我注意到一个叫做
ResolvedParameter
的东西,并对此进行了研究,但我不确定它是否是我所需要的。我不这么认为。但是,如果这确实是我所需要的,我希望能为我的情况举个例子。

您可以创建自己的
参数

public class TableNameParameter : Parameter
{
    public override Boolean CanSupplyValue(
        ParameterInfo pi, IComponentContext context, out Func<Object> valueProvider)
    {
        valueProvider = null;

        if (pi.ParameterType != typeof(String) && pi.Name != "tableName")
            return false;

        valueProvider = () =>
        {
            ITableNameResolver tableNameResolver = context.Resolve<ITableNameResolver>();
            Type entityType = pi.Member.DeclaringType.GetGenericArguments()[0];
            String tableName = tableNameResolver.GetTableName(entityType);
            return tableName;
        };
        return true;
    }
}
public类tablename参数:参数
{
公共重写布尔值CanSupplyValue(
ParameterInfo pi,IComponentContext,out Func valueProvider)
{
valueProvider=null;
if(pi.ParameterType!=typeof(String)&&pi.Name!=“tableName”)
返回false;
valueProvider=()=>
{
ITableNameResolver tableNameResolver=context.Resolve();
类型entityType=pi.Member.DeclaringType.GetGenericArguments()[0];
String tableName=tableNameResolver.GetTableName(entityType);
返回表名;
};
返回true;
}
}

您可以创建自己的
参数

public class TableNameParameter : Parameter
{
    public override Boolean CanSupplyValue(
        ParameterInfo pi, IComponentContext context, out Func<Object> valueProvider)
    {
        valueProvider = null;

        if (pi.ParameterType != typeof(String) && pi.Name != "tableName")
            return false;

        valueProvider = () =>
        {
            ITableNameResolver tableNameResolver = context.Resolve<ITableNameResolver>();
            Type entityType = pi.Member.DeclaringType.GetGenericArguments()[0];
            String tableName = tableNameResolver.GetTableName(entityType);
            return tableName;
        };
        return true;
    }
}
public类tablename参数:参数
{
公共重写布尔值CanSupplyValue(
ParameterInfo pi,IComponentContext,out Func valueProvider)
{
valueProvider=null;
if(pi.ParameterType!=typeof(String)&&pi.Name!=“tableName”)
返回false;
valueProvider=()=>
{
ITableNameResolver tableNameResolver=context.Resolve();
类型entityType=pi.Member.DeclaringType.GetGenericArguments()[0];
String tableName=tableNameResolver.GetTableName(entityType);
返回表名;
};
返回true;
}
}

查看
log4net
记录器解析代码,它似乎与您想要的类似。看看你是否能适应你的使用。。。看看
log4net
logger解析代码,它似乎与您想要的类似。看看你是否能适应你的使用。。。完美的非常感谢。完美的非常感谢。