在ASP.Net Core下,Autofac實現自動注入


之前使用以來注入的時候,都是在xml配置對應的接口和實現類,經常會出現忘了寫配置,導致注入不生效,會報錯,而且項目中使用的是SPA的模式,ajax報錯也不容易看出問題,經常會去排查日志找問題。

於是在園子里面看到園友的自動注入,覺得很有意思,但是園友是用的MVC5,就自己再.Net Core上試了一下,於是就記錄下來使用的過程

在asp.net core中,自帶了一個依賴注入容器,但是功能有限,我們一般會采用第三方的容器來接管自帶的容器,

var builder = new ContainerBuilder();
builder.Populate(services);
var baseType = typeof(AutoInject);
var assembly = Assembly.GetEntryAssembly();
            
builder.RegisterAssemblyTypes(assembly)
                .Where(t => baseType.IsAssignableFrom(t) && t != baseType)
                .AsImplementedInterfaces().InstancePerLifetimeScope();

this.ApplicationContainer = builder.Build();
AutoInject 是一個空的接口,只會為了標記一下哪些地方需要被autofac自動注入

然后來試一下,添加一個接口Itest.cs,實現AutoInject
 public  interface ITest: AutoInject
    {
       string GetName();
   }

添加一個實現類Test.cs

  public class Test:ITest
    {
        public string GetName()
        {
            return "getName";
        }
    }

在控制器的構造方法里面把需要注入的接口添加進去

private readonly ITest test;

        public HomeController(ITest test)
        {
            this.test = test;
        }

運行

 

但是實際上,很多項目都會把項目分到其他的類庫里面,如果使用Assembly.GetEntryAssembly();,放到其他的項目里面的可以被注入的類就無法被注入了,所以需要手動去加載其他的程序集,當然也可以用代碼去掃描一下
AssemblyLoadContext.Default.LoadFromAssemblyName(new AssemblyName("程序集名稱"));

autofac的RegisterAssemblyTypes方法參數是一個數組,把需要注入的程序集加載起來,拼成一個數組,傳遞進去就可以實現在.Net Core下的跨程序集加載了






免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM