C# 使用反射和结构图

C# 使用反射和结构图,c#,reflection,structuremap,C#,Reflection,Structuremap,我正在使用结构映射将DataContext自动注入到我的存储库构造函数中。我有一个名字(例如“Project1”),我需要为project动态创建一个存储库实例 我使用的是标准命名约定,所以我知道它是“Project1DataContext”。我已经使用反射创建了Project1DataContext的实例,但它是一种对象类型。问题是我需要将Project1DataContext对象传递到我的存储库中,以创建它的实例。如何使用反射来实现这一点?有没有可能通过某种方式投射物体 Assembly m

我正在使用结构映射将DataContext自动注入到我的存储库构造函数中。我有一个名字(例如“Project1”),我需要为project动态创建一个存储库实例

我使用的是标准命名约定,所以我知道它是“Project1DataContext”。我已经使用反射创建了Project1DataContext的实例,但它是一种对象类型。问题是我需要将Project1DataContext对象传递到我的存储库中,以创建它的实例。如何使用反射来实现这一点?有没有可能通过某种方式投射物体

Assembly myDataContextAssembly = typeof(SomeTypeInTheAssembly).Assembly;
Type dataContextType = myDataContextAssembly.GetType(ProjectName + "DataContext");
object dataContext = Activator.CreateInstance(dataContextType);    
// I need to cast the data context here
IRepository<Project1DataContext> = new Repository<Project1DataContext>(dataContext)
Assembly myDataContextAssembly=typeof(SomeTypeInTheAssembly).Assembly;
类型dataContextType=myDataContextAssembly.GetType(ProjectName+“DataContext”);
对象dataContext=Activator.CreateInstance(dataContextType);
//我需要在这里转换数据上下文
IRepository=新存储库(dataContext)

同时,我将使用if语句,但如果我有100多个项目,这不是一个可行的解决方案。我需要使用反射来实现这一点,理想情况下,让结构映射为我确定类型并注入它们。

根据我从提供的信息中了解的情况,在将dataContext对象传递给IRepository和Repository泛型类之前,您希望将该对象强制转换为其真实类型。这意味着你想让它们具体化。您可以在运行时使它们具体化,但不能通过将类型对象作为泛型参数传递。此外,这里不能依赖泛型类型推断,因为这只能在编译时完成

我将假设您的方法返回一个IRepository或Respository(没有泛型参数)

您需要做的是:使用dataContextType为存储库创建一个具体类型,然后使用该具体类型创建一个存储库对象,您可以将该对象强制转换到存储库中,然后将其返回

        Assembly myDataContextAssembly = typeof(SomeTypeInTheAssembly).Assembly;
        Type dataContextType = myDataContextAssembly.GetType(ProjectName + "DataContext");
        Type concreteRepositoryType = typeof(Generic<>).MakeGenericType(dataContextType);
        Repository repository = (Repository)System.Activator.CreateInstance(concreteRepositoryType);
        return repository;
Assembly myDataContextAssembly=typeof(SomeTypeInTheAssembly).Assembly;
类型dataContextType=myDataContextAssembly.GetType(ProjectName+“DataContext”);
类型concreteRepositoryType=typeof(泛型)。MakeGenericType(dataContextType);
Repository Repository=(Repository)System.Activator.CreateInstance(concreteRepositoryType);
返回存储库;

您能否给出一个或两个同时使用的if语句的示例?这会让你更容易看到你想要解决的问题。