您的位置:首页 > 其它

[翻译]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 PluginFamilyPluggable特性

如果你愿意使用特性让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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: