Dependency Injection در Asp.Net WebApi (روش اول)
نویسنده: مسعود پاکدل
تاریخ: ۱۳۹۳/۱۱/۱۵ ۱:۲۵
آدرس: www.dntips.ir
| مطالب | ۳۶۹۴ |
| نویسندگان | ۲۷۶ |
| گروههای مطالب | ۱۰۲۴ |
| نقشههای راه | ۱۱۹ |
| دورهها | ۱۴ |
| اشتراکها | ۱۷۹۱۴ |
public class ApiDependencyResolver : IDependencyResolver
{
public ApiDependencyResolver(IWindsorContainer container)
{
Container = container;
}
public IWindsorContainer Container
{
get;
private set;
}
public object GetService(Type serviceType)
{
try
{
return Container.Kernel.HasComponent(serviceType) ? Container.Resolve(serviceType) : null;
}
catch (Kernel.ComponentNotFoundException)
{
return null;
}
}
public IEnumerable<object> GetServices(Type serviceType)
{
try
{
return Container.ResolveAll(serviceType).Cast<object>();
}
catch (Kernel.ComponentNotFoundException)
{
return Enumerable.Empty<object>();
}
}
public IDependencyScope BeginScope()
{
return new SharedDependencyResolver(Container);
}
public void Dispose()
{
Container.Dispose();
}
} public class SharedDependencyResolver : IDependencyScope
{
public SharedDependencyResolver(IWindsorContainer container)
{
Container = container;
Scope = Container.BeginScope();
}
public IWindsorContainer Container
{
get;
private set;
}
public IDisposable Scope
{
get;
private set;
}
public object GetService(Type serviceType)
{
try
{
return Container.Kernel.HasComponent(serviceType) ? Container.Resolve(serviceType) : null;
}
catch (ComponentNotFoundException)
{
return null;
}
}
public IEnumerable<object> GetServices(Type serviceType)
{
try
{
return Container.ResolveAll(serviceType).Cast<object>();
}
catch (ComponentNotFoundException)
{
return null;
}
}
public void Dispose()
{
Scope.Dispose();
}
} public IDependencyScope BeginScope()
{
var child = container.CreateChildContainer();
return new ApiDependencyResolver(child);
} public class KernelInstaller : IWindsorInstaller
{
public void Install(IWindsorContainer container, IConfigurationStore store)
{
container.Register(Classes.FromThisAssembly().BasedOn<ApiController>().LifestyleTransient());
container.Kernel.Resolver.AddSubResolver(new CollectionResolver(container.Kernel, true));
}
} public class Startup
{
public void Configuration( IAppBuilder appBuilder )
{
var container = new WindsorContainer();
container.Install(new KernelInstaller());
var config = new HttpConfiguration
{
DependencyResolver = new ApiDependencyResolver(container)
};
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "Default" ,
routeTemplate: "{controller}/{action}/{name}" ,
defaults: new { name = RouteParameter.Optional }
);
config.EnsureInitialized();
appBuilder.UseWebApi( config );
}
}