加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 使用Autofac创建具有依赖关系的类的实例

发布时间:2020-12-15 07:46:50 所属栏目:百科 来源:网络整理
导读:问题: 假设班级: public class MyAwesomeClass{ private IDependCls _dependCls; public MyAwesomeClass(IDependCls dependCls) { _dependCls = dependCls; }} 在其他地方我需要获得该类的实例,如下所示: public class SomewhereElse{ public void Awesom
问题:

假设班级:

public class MyAwesomeClass
{
   private IDependCls _dependCls;
   public MyAwesomeClass(IDependCls dependCls)
   {
       _dependCls = dependCls;
   }

}

在其他地方我需要获得该类的实例,如下所示:

public class SomewhereElse
{
    public void AwesomeMethod()
    {
        //...
        // AwesomeStuff
        //...

        var GetErDone = new MyAwesomeClass();  // PROBLEM! No constructor with 0 arguements
    }
}

问题是,我

建议的解决方案1:

A)必须制作一个额外的构造来解决依赖关系吗?例如:

public MyAwesomeClass() // new constructor
   {
       _dependCls = DependencyResolver.Current.GetService<IDependCls>();
   }


public class SomewhereElse
{
    public void AwesomeMethod()
    {
        var GetErDone = new MyAwesomeClass();  // IT WORKS!!
    }
}

提议的解决方案2:

B)在var GetErDone之前使用AwesomeMethod中的解析器

public class SomewhereElse
{
    public void AwesomeMethod()
    {
        var depCls = _dependCls = DependencyResolver.Current.GetService<IDependCls>();
        var GetErDone = new MyAwesomeClass(depCls);  // IT WORKS!!
    }
}

Autofac解决方案?

C)其他一些Autofac方式?

寻找最佳实践,以及尽可能好的Autofac解决方案.我认为第一种方式是最差的,因为可选的依赖性可能会导致很多混乱.

摘要:

当MyAwesomeClass具有依赖关系时,如何获得新的MyAwesomeClass()?

解决方法

看看 Composition Root模式.

你是对的,提升依赖性解决方案只会将问题转移到另一个地方.但是,如果继续在对象图中向上移动,则会到达应用程序的入口点.在那里,您将构成对象图.

将其与Service Locator anti-pattern(在您的情况下使用客户端类中的DependencyResolver)进行比较,您将看到Composition Root是一个出色的解决方案.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读