.net下IOC框架StructureMap的使用介绍比较多,这里不作介绍。未入门的请移步StructureMap介绍。
在项目里面我们一般实现的接口类的构造函数具有参数。例如:
using System;
using System.Text;
namespace Dynamic.BLL.Interface
{
public interface IModuleFactory { string Do(); }
}
namespace Dynamic.BLL.Libs
{
public class ModuleCreatorTest : IModuleFactory { public int OrgRuleId { get; set; } public ModuleCreatorTest(int orgRuleId) { OrgRuleId = orgRuleId; } pubic string Do() { return OrgRuleId ; } }
}
这里我使用APPSetting配置文档进行配置:
<configuration> <configSections> <section name="StructureMap" type="StructureMap.Configuration.StructureMapConfigurationSection,StructureMap"/> </configSections> <StructureMap MementoStyle="Attribute"> <!--ModuleCreatorTest--> <DefaultInstance PluginType="Dynamic.BLL.Interface.IModuleFactory,Dynamic.BLL.Interface" PluggedType="Dynamic.BLL.Libs.ModuleCreatorTest,Dynamic.BLL.Libs" Scope="PerRequest" orgRuleId="1"/> </StructureMap> </configuration>
在具体使用的时候我们需要创建一个IDictionary<string,object>对象传入构造函数的参数。
var cons = new Dictionary<string, object> {{"orgRuleId", 2}}; IModuleFactory moduleFactory = StructureMap.ObjectFactory.GetInstance<IModuleFactory>( new ExplicitArguments(cons));