using System;
|
using System.Collections.Generic;
|
using System.Linq;
|
using System.Text;
|
using System.Web.Mvc;
|
using Autofac;
|
using Autofac.Integration.Mvc;
|
using Autofac.Integration.WebApi;
|
|
namespace PalGain.Core
|
{
|
public class PalGainEngine
|
{
|
private static PalGainEngine g_instance = null;
|
private ContainerManager _containerManager;
|
public static PalGainEngine Instance
|
{
|
get
|
{
|
if (g_instance == null)
|
{
|
g_instance = new PalGainEngine();
|
}
|
return g_instance;
|
}
|
}
|
public IContainer Container
|
{
|
get;
|
private set;
|
}
|
public void Register()
|
{
|
var Builder = new ContainerBuilder();
|
Container = Builder.Build();
|
|
var typeFinder = new WebAppTypeFinder();
|
Builder = new ContainerBuilder();
|
//发现类型IDependencyRegistrar的实现类
|
var drTypes = typeFinder.FindClassesOfType<IDependencyRegistrar>();
|
var drInstances = new List<IDependencyRegistrar>();
|
foreach (var drType in drTypes)
|
{
|
drInstances.Add((IDependencyRegistrar)Activator.CreateInstance(drType));
|
}
|
//查询能力
|
drInstances = drInstances.AsQueryable().OrderBy(t => t.Order).ToList();
|
foreach (var dependencyRegister in drInstances)
|
{
|
//依赖登记
|
dependencyRegister.Register(Builder, typeFinder);
|
}
|
Builder.Update(Container);
|
_containerManager = new ContainerManager(Container);
|
DependencyResolver.SetResolver(new AutofacDependencyResolver(Container));
|
}
|
public void RegisterWebApi()
|
{
|
var Builder = new ContainerBuilder();
|
Container = Builder.Build();
|
|
var typeFinder = new WebAppTypeFinder();
|
Builder = new ContainerBuilder();
|
var drTypes = typeFinder.FindClassesOfType<IDependencyRegistrar>();
|
var drInstances = new List<IDependencyRegistrar>();
|
foreach (var drType in drTypes)
|
{
|
drInstances.Add((IDependencyRegistrar)Activator.CreateInstance(drType));
|
}
|
drInstances = drInstances.AsQueryable().OrderBy(t => t.Order).ToList();
|
foreach (var dependencyRegister in drInstances)
|
{
|
dependencyRegister.Register(Builder, typeFinder);
|
}
|
Builder.Update(Container);
|
_containerManager = new ContainerManager(Container);
|
}
|
public ContainerManager ContainerManager
|
{
|
get { return _containerManager; }
|
}
|
public T Resolve<T>() where T : class
|
{
|
return ContainerManager.Resolve<T>();
|
}
|
public object Resolve(Type type)
|
{
|
return ContainerManager.Resolve(type);
|
}
|
public T ResolveNamed<T>(string key = "") where T : class
|
{
|
return ContainerManager.Resolve<T>(key);
|
}
|
}
|
}
|