其實Windows服務使用autofac注入很簡單,只需要簡單的配置然后調用Build就可以。以下代碼winform中同樣可以用
/*
.Net framework 4.5
Autofac 4.9.4.0
EF 6
App.config 中connectionStrings的配置和winform一樣
*/
----AutofacBuilder.cs
public class AutofacBuilder
{
private static IContainer _container;
public static void init()
{
ContainerBuilder builder = new ContainerBuilder();
//配置接口依賴
// builder.RegisterType<MyDbContext>().As<DbContext>(); //EF依賴注入
// builder.RegisterType<Service1>().As<Service1>(); //這一句可以不要,因為下面已經把當前程序集下的類注入了ico容器
//注冊當前程序集的所有類成員
builder.RegisterAssemblyTypes(Assembly.GetExecutingAssembly())
.AsImplementedInterfaces().AsSelf();
_container = builder.Build(); //只有在Build之后,才能調用GetFromFac
}
public static T GetFromFac<T>()
{
return _container.Resolve<T>();
}
}
-----Program.cs
static class Program
{
/// <summary>
/// 應用程序的主入口點。
/// </summary>
static void Main()
{
//windows服務初始化工作
AutofacBuilder.init();
var srv1=AutofacUtil.GetFromFac<Service1>(); //獲取服務Service1
ServiceBase.Run(srv1);
}
}