[翻译]StructureMap 指南 – .NET中的依赖注入和控制反转
2008-09-04 14:57
423 查看
原文地址:http://www.pnpguidance.net/Post/StructureMapTutorialDependencyInjectionIoCNET.aspx
StuctureMap 是一种.NET下的依赖注入框架,希望2.5版早点发布(目前最新是2.4.9)。这篇指南可以帮助您入门。
StructureMap依赖注入基础
在大多数ASP.NET WEB应用程序、智能客户端程序、WPF程序中,你都可以通过提供接口,创建可重用的服务。如:你定义一个接口叫ILogger,这个接口声明一组契约,为你的程序记录日志,并且你做了不同的、可重用的实现这个接口的类,如:类DatabaseLogger,把日志记录到数据库中。
using StructureMap;
using StructureMap.Attributes;
using StructureMap.Configuration.DSL;
namespace StructureMapTutorials
{
class Program
{
static void Main(string[] args)
{
StructureMapConfiguration
.AddRegistry(new ServiceRegistry());
ICustomerDataSource dataSource =
ObjectFactory.GetInstance<ICustomerDataSource>();
}
}
public class ServiceRegistry : Registry
{
protected override void configure()
{
ForRequestedType<ILogger>()
.TheDefaultIsConcreteType<DatabaseLogger>()
.CacheBy(InstanceScope.Singleton);
ForRequestedType<ICustomerDataSource>()
.TheDefaultIsConcreteType<CustomerDataSource>()
.CacheBy(InstanceScope.Singleton);
}
}
public interface ILogger { }
public class DatabaseLogger : ILogger { }
public interface ICustomerDataSource { }
public class CustomerDataSource : ICustomerDataSource
{
private readonly ILogger _logger;
public CustomerDataSource(ILogger logger)
{
_logger = logger;
}
}
}
StructureMap PluginFamily和Pluggable特性
如果你愿意使用特性让StructureMap扫描不同的程序集并自动注册不同的类型到你的程序,你可以使用PluginFamily和Pluggable特性:
using StructureMap;
using StructureMap.Attributes;
using StructureMap.Configuration.DSL;
namespace StructureMapTutorials
{
class Program
{
static void Main(string[] args)
{
StructureMapConfiguration
.ScanAssemblies()
.IncludeTheCallingAssembly();
ICustomerDataSource dataSource =
ObjectFactory.GetInstance<ICustomerDataSource>();
}
}
[PluginFamily("Database", IsSingleton = true)]
public interface ILogger { }
[Pluggable("Database")]
public class DatabaseLogger : ILogger { }
[PluginFamily("CustomerDataSource", IsSingleton = true)]
public interface ICustomerDataSource { }
[Pluggable("CustomerDataSource")]
public class CustomerDataSource : ICustomerDataSource
{
private readonly ILogger _logger;
public CustomerDataSource(ILogger logger)
{
_logger = logger;
}
}
}
结语
这篇文章介绍了些在.NET中使用StructureMap框架依赖注入和控制反转的基础知识。
你也可以试试这些工具:Autofac, Castle Windsor, Ninject, SpringFramework.net, Unity。
希望对您有所帮助,David Hayden。
StuctureMap 是一种.NET下的依赖注入框架,希望2.5版早点发布(目前最新是2.4.9)。这篇指南可以帮助您入门。
StructureMap依赖注入基础
在大多数ASP.NET WEB应用程序、智能客户端程序、WPF程序中,你都可以通过提供接口,创建可重用的服务。如:你定义一个接口叫ILogger,这个接口声明一组契约,为你的程序记录日志,并且你做了不同的、可重用的实现这个接口的类,如:类DatabaseLogger,把日志记录到数据库中。
using StructureMap;
using StructureMap.Attributes;
using StructureMap.Configuration.DSL;
namespace StructureMapTutorials
{
class Program
{
static void Main(string[] args)
{
StructureMapConfiguration
.AddRegistry(new ServiceRegistry());
ICustomerDataSource dataSource =
ObjectFactory.GetInstance<ICustomerDataSource>();
}
}
public class ServiceRegistry : Registry
{
protected override void configure()
{
ForRequestedType<ILogger>()
.TheDefaultIsConcreteType<DatabaseLogger>()
.CacheBy(InstanceScope.Singleton);
ForRequestedType<ICustomerDataSource>()
.TheDefaultIsConcreteType<CustomerDataSource>()
.CacheBy(InstanceScope.Singleton);
}
}
public interface ILogger { }
public class DatabaseLogger : ILogger { }
public interface ICustomerDataSource { }
public class CustomerDataSource : ICustomerDataSource
{
private readonly ILogger _logger;
public CustomerDataSource(ILogger logger)
{
_logger = logger;
}
}
}
StructureMap PluginFamily和Pluggable特性
如果你愿意使用特性让StructureMap扫描不同的程序集并自动注册不同的类型到你的程序,你可以使用PluginFamily和Pluggable特性:
using StructureMap;
using StructureMap.Attributes;
using StructureMap.Configuration.DSL;
namespace StructureMapTutorials
{
class Program
{
static void Main(string[] args)
{
StructureMapConfiguration
.ScanAssemblies()
.IncludeTheCallingAssembly();
ICustomerDataSource dataSource =
ObjectFactory.GetInstance<ICustomerDataSource>();
}
}
[PluginFamily("Database", IsSingleton = true)]
public interface ILogger { }
[Pluggable("Database")]
public class DatabaseLogger : ILogger { }
[PluginFamily("CustomerDataSource", IsSingleton = true)]
public interface ICustomerDataSource { }
[Pluggable("CustomerDataSource")]
public class CustomerDataSource : ICustomerDataSource
{
private readonly ILogger _logger;
public CustomerDataSource(ILogger logger)
{
_logger = logger;
}
}
}
结语
这篇文章介绍了些在.NET中使用StructureMap框架依赖注入和控制反转的基础知识。
你也可以试试这些工具:Autofac, Castle Windsor, Ninject, SpringFramework.net, Unity。
希望对您有所帮助,David Hayden。
相关文章推荐
- StructureMap 指南 – .NET中的依赖注入和控制反转
- .Net 控制反转于依赖注入 简单容易理解(转载)
- nopCommerce开发者指南(四):控制反转和依赖注入
- Java 控制反转和依赖注入模式【翻译】【整理】
- 【简译】关于依赖反转原则、控制反转和依赖注入的抽象的初学者指南
- ADO.NET .net core2.0添加json文件并转化成类注入控制器使用 简单了解 iTextSharp实现HTML to PDF ASP.NET MVC 中 Autofac依赖注入DI 控制反转IOC 了解一下 C# AutoMapper 了解一下
- 轻松理解 Java开发中的依赖注入(DI)和控制反转(IOC)
- 控制反转(IOC)与依赖注入(DI)
- 依赖注入&控制反转 oC 容器和Dependency Injection 模式
- Spring2.5学习笔记1-控制反转-依赖注入类型
- IOC控制反转 和 DI依赖注入
- (转)依赖注入和控制反转
- [转]控制反转(IOC)和依赖注入(DI)
- Spring控制反转+依赖注入
- 控制反转 依赖注入
- Spring容器的控制反转(IOC)和依赖注入(DI)
- [转]向依赖关系宣战——依赖倒置、控制反转和依赖注入辨析
- IoC模式(依赖、依赖倒置、依赖注入、控制反转)
- 控制反转---依赖注入理解