C# ASP核心-控制器力参数

C# ASP核心-控制器力参数,c#,asp.net,asp.net-core,dependency-injection,C#,Asp.net,Asp.net Core,Dependency Injection,我正在建立一个图书馆,它需要更通用的可能。所以我有一个非常简单的控制器 public class AdminController : Controller { object _repo; public AdminController(object repo) { _repo = repo; } ... } 现在我想告诉我的webapp中的ASP将此控制器与Repository类一起使用,而不需要Repository从接口继承 例如,如果

我正在建立一个图书馆,它需要更通用的可能。所以我有一个非常简单的控制器

public class AdminController : Controller
{
    object _repo;
    public AdminController(object repo)
    {
        _repo = repo;
    }

    ...
}
现在我想告诉我的webapp中的ASP将此控制器与
Repository
类一起使用,而不需要Repository从接口继承

例如,如果需要实例化AdminController对象,只需以与其他需要Repository参数的控制器相同的方式传递存储库

我已经尝试在Startup.cs文件中执行此操作,但它没有执行任何操作

services.AddScoped<AdminController>(c => {
    Console.WriteLine("We need you");
    return new AdminController(c.GetService<IRepository>());
});
services.AddScoped(c=>{
Console.WriteLine(“我们需要你”);
返回新的AdminController(c.GetService());
});

或许泛型可以帮助您

public class AdminController<T> : Controller
{
    private readonly T _repo;

    public AdminController(T repo)
    {
        _repo = repo;
    }

    ...
}

services.AddScoped<AdminController<IRepository>>(c => {
    Console.WriteLine("We need you");
    return new AdminController<IRepository>(c.GetService<IRepository>());
});
公共类AdminController:控制器
{
私人只读T_回购;
公共行政总监(T回购)
{
_回购=回购;
}
...
}
services.AddScoped(c=>{
Console.WriteLine(“我们需要你”);
返回新的AdminController(c.GetService());
});

我被你的问题弄糊涂了。您似乎已经获得了实现
IRepository
的东西,因此您关于“使用Repository类而不需要Repository从接口继承”的一句话,看起来您将只获得实现接口的东西。另外,为什么您的控制器不只是接受一个
i假定值
?这看起来真的像是一个XY问题我正在构建一个库,我不希望作为构造函数参数传递的repo需要继承任何东西,如果您不理解我的目标,请不要考虑上下文,我如何实现它。事实上,存储库的实现并不在同一个项目中,库和我希望在任何地方都不受限制地使用我的库。也许这个例子并不好,但它足够简单,可以理解我想要实现的目标