相关疑难解决方法(0)

如何避免依赖注入构造函数的疯狂?

我发现我的构造函数开始看起来像这样:

public MyClass(Container con, SomeClass1 obj1, SomeClass2, obj2.... )
Run Code Online (Sandbox Code Playgroud)

随着参数列表不断增加.由于"容器"是我的依赖注入容器,为什么我不能这样做:

public MyClass(Container con)
Run Code Online (Sandbox Code Playgroud)

每个班级?有什么缺点?如果我这样做,感觉我正在使用一个美化的静电.请分享您对IoC和依赖注入疯狂的看法.

c# java dependency-injection ioc-container inversion-of-control

288
推荐指数
4
解决办法
6万
查看次数

.NET Core DI,将参数传递给构造函数的方法

拥有以下服务构造函数

public class Service : IService
{
     public Service(IOtherService service1, IAnotherOne service2, string arg)
     {

     }
}
Run Code Online (Sandbox Code Playgroud)

使用.NET Core IOC机制传递参数有哪些选择?

_serviceCollection.AddSingleton<IOtherService , OtherService>();
_serviceCollection.AddSingleton<IAnotherOne , AnotherOne>();
_serviceCollection.AddSingleton<IService>(x=>new Service( _serviceCollection.BuildServiceProvider().GetService<IOtherService>(), _serviceCollection.BuildServiceProvider().GetService<IAnotherOne >(), "" ));
Run Code Online (Sandbox Code Playgroud)

还有其他方法吗?

c# dependency-injection ioc-container .net-core asp.net-core

52
推荐指数
4
解决办法
2万
查看次数

.Net Core 依赖注入从构造函数中注入

我需要从构造函数中注入我在安装程序中声明的所有内容。

我可以吗?如何从构造函数中注入服务?类似于 Angular 2 中的 Injector 服务。

在控制器中没有构造函数的注入服务

像这样的东西

    public class ControllerBase : Controller
    {
        protected IRepository<Test> _test;
        protected IRepository<Test1> _test1;
        protected IRepository<Test2> _test2;

        public ControllerBase(INJECTOR injector)
        {
            _test = injector.inject(IRepository<Test>);
            _test1 = injector.inject(IRepository<Test1>);
            _test2 = injector.inject(IRepository<Test2>);
        }
    }

    public class SomeController : ControllerBase
    {
        public SomeController(INJECTOR injector)
            : base(injector)
        {

        }
    }
Run Code Online (Sandbox Code Playgroud)

感谢回答@Rick van den Bosch

对于那些仍然无法获得我想要的东西的人:

public class ControllerBase : Controller
{
    protected IRepository<Test> _test;
    protected IRepository<Test1> _test1;
    protected IRepository<Test2> _test2;

    public ControllerBase(IServiceProvider injector)
    {
        _test = injector.GetService<IRepository<Test>>(); …
Run Code Online (Sandbox Code Playgroud)

c# asp.net-core-mvc .net-core asp.net-core

5
推荐指数
1
解决办法
1万
查看次数