Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 4.0 将手写DI转换为温莎提供的DI_C# 4.0_Dependency Injection_Castle Windsor_Factory_Factory Pattern - Fatal编程技术网

C# 4.0 将手写DI转换为温莎提供的DI

C# 4.0 将手写DI转换为温莎提供的DI,c#-4.0,dependency-injection,castle-windsor,factory,factory-pattern,C# 4.0,Dependency Injection,Castle Windsor,Factory,Factory Pattern,在过去的六、七个月里,我一直在我的一些组件中进行DI,结果它们变得有点复杂。在过去,我一直在用手写工厂创建对象图。由于它变得不可管理,我尝试将代码移动到依赖于框架的DI(通过代码,而不是通过一些XML文件)。我正在发布我的代码以及我遇到的问题 这是我的合成层(它很大,请注意:): IAgentFactory GetAgentFactory() { 字符串错误消息; IDictionary agentFactoryPrerequisite=新字典(); 字符串restResponseHeaderS

在过去的六、七个月里,我一直在我的一些组件中进行DI,结果它们变得有点复杂。在过去,我一直在用手写工厂创建对象图。由于它变得不可管理,我尝试将代码移动到依赖于框架的DI(通过代码,而不是通过一些XML文件)。我正在发布我的代码以及我遇到的问题

这是我的合成层(它很大,请注意:):

IAgentFactory GetAgentFactory()
{
字符串错误消息;
IDictionary agentFactoryPrerequisite=新字典();
字符串restResponseHeaderStatus=MyConfigurationProject.GetConfigValue(“restResponseHeaderStatus”,out errorMessage);
var service1Parameters=新ServiceParameters();
service1Parameters.BindingName=MyConfiguration项目.GetConfigValue(“Service1WebHttpBindingConfiguration”,out errorMessage).ToString();
service1Parameters.HeaderPassword=MyConfigurationProject.GetConfigValue(“Service1HeaderPassword”,out errorMessage).ToString();
service1Parameters.HeaderUserName=MyConfiguration项目.GetConfigValue(“Service1HeaderUserName”,out errorMessage).ToString();
service1Parameters.ResponseHeaderStatus=ResponseHeaderStatus;
service1Parameters.ServicePassword=MyConfigurationProject.GetConfigValue(“Service1ServicePassword”,out errorMessage).ToString();
service1Parameters.ServiceUrl=myConfiguration项目.GetConfigValue(“Service1URL”,out errorMessage).ToString();
service1Parameters.ServiceUserName=MyConfigurationProject.GetConfigValue(“Service1ServiceUserName”,out errorMessage).ToString();
添加(新的键值对(AgentType.Service1,service1Parameters));
var agentFactory=新的agentFactory(agentFactoryPrerequisite);
退货代理工厂;
}
受保护的DatalayerSettings GetDataLayerSettings()
{
var datalayerSettings=新的datalayerSettings();
datalayerSettings.ConnectionString=ConfigurationManager.ConnectionString[“MyConnectionString”]。ConnectionString;
datalayerSettings.MySchemaName=ConfigurationManager.AppSettings[“MyDatabaseSchema”];
datalayerSettings.updateinguser=“Admin”;
返回数据层设置;
}
PostgersDAFactory GetPostGresDaFactory()
{
var datalayerSettings=GetDataLayerSettings();
返回新的PostgersDataFactory(数据层设置,“MyAssembly.PostgresDA”、“MyDifferentitasAssembly.CommonDatalayer”、“MyServiceLogPath”);
}
公营邮政工厂
{
只读数据层设置\u数据层设置;
只读字符串_assemblyName;
只读字符串_logPath;
只读字符串_mySecondAssemblyName;
public PostgersDAFactory(DatalayerSettings DatalayerSettings,string assemblyName,string mySecondAssemblyName,string logPath)
{
_datalayerSettings=datalayerSettings;
_assemblyName=assemblyName;
_logPath=logPath;
_commonDaAssemblyName=commonDaAssemblyName;
}
公共IDA1 GetDA1Instance()
{
var type1=Type.GetType(“MyAssembly.PostgresDA.classrealizingimplementation_For_DA1,”+_assemblyName);
return(IDA1)Activator.CreateInstance(type1,_datalayerSettings,_logPath);
}
公共IDA2 GetDA2Instance()
{
var type1=Type.GetType(“MyAssembly.PostgresDA.classrealizingimplementation\u For_DA2,”+\u assemblyName);
返回(IDA2)Activator.CreateInstance(类型1,_datalayerSettings);
}
公共IDA3 GetDA3Instance()
{
var type1=Type.GetType(“MyAssembly2.ClassRealizationImplementation”用于“+”commonDaAssemblyName);
返回(IDA3)Activator.CreateInstance(类型1,_datalayerSettings);
}
}
public BaseFileHandler GetFileHandler(FileProvider FileProvider,MockedServiceCalculator MockedServiceCalculator=null)
{
字符串错误消息;
var postgresFactory=GetPostGresDaFactory();
var Da1Instance=postgresFactory.GetDA1Instance();
var fileSyncBusiness=新的fileSyncBusiness(Da1Instance);
var interfaceconfigurationparameters=fileSyncBusiness.GetInterfaceConfigurationParameters();
var servicePointDetailsSettings=新servicePointDetailsSettings();
var nullDate=新的日期时间(2099,1,1);
公共验证公共验证;
如果(mockedServicecalculator==null)
{
commonValidations=GetStubbedCommonValidations(nullDate);
}
其他的
{
commonValidations=GetCommonValidations_和mockedServicecalculator(nullDate,mockedServicecalculator);
}
交换机(文件提供程序)
{
案例FileProvider.Type1:
var type1Adapter=新的type1Adapter(false,nullDate);
servicePointDetailsSettings=GetUtilTapParameters(接口配置参数);
返回新的Type1FileHandler(ServicePointDetails设置、文件同步业务、commonValidations、type1Adapter);
案例FileProvider.Type2:
var type2Adapter=新的type2Adapter(true,nullDate);
servicePointDetailsSettings.ApplicatableParameters=MyApplicationCommonMethods.ConvertConfigurationTableToDictionary(接口配置参数,“ApplicatableIntype2”);
servicePointDetailsSettings.BadFileLocation=MyConfiguration项目.GetConfigValue(“Type2BadFileLocation”,输出错误消息);
servicePointDetailsSettings.DateFormat=MyConfiguration项目.GetConfigValue(“Type2DateFormat”,输出错误消息);
servicePointDetailsSettings.FailureFileLocation=MyConfiguration项目.GetConfigValue(“Type2FailureFile”,out errorMessage);
servicePointDetailsSettings.LogFileN
    IAgentFactory GetAgentFactory()
    {
        string errorMessage;
        IDictionary<AgentType, ServiceParameters> agentFactoryPrerequisite = new Dictionary<AgentType, ServiceParameters>();
        string restResponseHeaderStatus = MyConfigurationProject.GetConfigValue("RestResponseHeaderStatus", out errorMessage);


        var service1Parameters = new ServiceParameters();
        service1Parameters.BindingName = MyConfigurationProject.GetConfigValue("Service1WebHttpBindingConfiguration", out errorMessage).ToString();
        service1Parameters.HeaderPassword = MyConfigurationProject.GetConfigValue("Service1HeaderPassword", out errorMessage).ToString();
        service1Parameters.HeaderUserName = MyConfigurationProject.GetConfigValue("Service1HeaderUserName", out errorMessage).ToString();
        service1Parameters.ResponseHeaderStatus = restResponseHeaderStatus;
        service1Parameters.ServicePassword = MyConfigurationProject.GetConfigValue("Service1ServicePassword", out errorMessage).ToString();
        service1Parameters.ServiceUrl = MyConfigurationProject.GetConfigValue("Service1URL", out errorMessage).ToString();
        service1Parameters.ServiceUserName = MyConfigurationProject.GetConfigValue("Service1ServiceUserName", out errorMessage).ToString();
        agentFactoryPrerequisite.Add(new KeyValuePair<AgentType, ServiceParameters>(AgentType.Service1, service1Parameters));

        var agentFactory = new AgentFactory(agentFactoryPrerequisite);
        return agentFactory;
    }

    protected DatalayerSettings GetDataLayerSettings()
    {
        var datalayerSettings = new DatalayerSettings();
        datalayerSettings.ConnectionString = ConfigurationManager.ConnectionStrings["MyConnectionString"].ConnectionString;
        datalayerSettings.MySchemaName = ConfigurationManager.AppSettings["MyDatabaseSchema"];
        datalayerSettings.UpdatingUser = "Admin";
        return datalayerSettings;
    }



    PostgersDAFactory GetPostGresDaFactory()
    {
        var datalayerSettings = GetDataLayerSettings();
        return new PostgersDAFactory(datalayerSettings, "MyAssembly.PostgresDA", "MyDifferentAssembly.CommonDatalayer", "MyServiceLogPath");
    }



    public class PostgersDAFactory
    {
        readonly DatalayerSettings _datalayerSettings;
        readonly string _assemblyName;
        readonly string _logPath;
        readonly string _mySecondAssemblyName;
        public PostgersDAFactory(DatalayerSettings datalayerSettings, string assemblyName, string mySecondAssemblyName, string logPath)
        {
            _datalayerSettings = datalayerSettings;
            _assemblyName = assemblyName;
            _logPath = logPath;
            _commonDaAssemblyName = commonDaAssemblyName;
        }

        public IDA1 GetDA1Instance()
        {
            var type1 = Type.GetType("MyAssembly.PostgresDA.ClassRealisingImplementation_For_DA1," + _assemblyName);
            return (IDA1)Activator.CreateInstance(type1, _datalayerSettings, _logPath);
        }

        public IDA2 GetDA2Instance()
        {
            var type1 = Type.GetType("MyAssembly.PostgresDA.ClassRealisingImplementation_For_DA2," + _assemblyName);
            return (IDA2)Activator.CreateInstance(type1, _datalayerSettings);
        }

        public IDA3 GetDA3Instance()
        {
            var type1 = Type.GetType("MyAssembly2.ClassRealisingImplementation_For_DA3," + _commonDaAssemblyName);
            return (IDA3)Activator.CreateInstance(type1, _datalayerSettings);
        }

    }



    public BaseFileHandler GetFileHandler(FileProvider fileprovider, MockedServiceCalculator mockedServicecalculator = null)
    {
        string errorMessage;
        var postgresFactory = GetPostGresDaFactory();
        var Da1Instance = postgresFactory.GetDA1Instance();
        var fileSyncBusiness = new FileSyncBusiness(Da1Instance);
        var interfaceConfiguratonParameters = fileSyncBusiness.GetInterfaceConfigurationParameters();
        var servicePointDetailsSettings = new ServicePointDetailsSettings();
        var nullDate = new DateTime(2099, 1, 1);

        CommonValidations commonValidations;
        if (mockedServicecalculator == null)
        {
            commonValidations = GetStubbedCommonValidations(nullDate);
        }
        else
        {
            commonValidations = GetCommonValidations_WithMockedServiceCalculator(nullDate, mockedServicecalculator);
        }

        switch (fileprovider)
        {
            case FileProvider.Type1:
                var type1Adapter = new Type1Adaptor(false, nullDate);
                servicePointDetailsSettings = GetUtiltaParameters(interfaceConfiguratonParameters);
                return new Type1FileHandler(servicePointDetailsSettings, fileSyncBusiness, commonValidations, type1Adapter);

            case FileProvider.Type2:
                var type2Adapter = new Type2Adaptor(true, nullDate);
                servicePointDetailsSettings.ApplicableParameters = MyApplicationCommonMethods.ConvertConfigurationTableToDictonary(interfaceConfiguratonParameters, "applicableintype2");
                servicePointDetailsSettings.BadFileLocation = MyConfigurationProject.GetConfigValue("Type2BadFileLocation", out errorMessage);
                servicePointDetailsSettings.DateFormat = MyConfigurationProject.GetConfigValue("Type2DateFormat", out errorMessage);
                servicePointDetailsSettings.FailureFileLocation = MyConfigurationProject.GetConfigValue("Type2FailureFile", out errorMessage);

                servicePointDetailsSettings.LogFileName = "Type2LogFile";
                servicePointDetailsSettings.LogPath = MyConfigurationProject.GetConfigValue("Type2ErrorLog", out errorMessage);
                servicePointDetailsSettings.MandatoryParameters = MyApplicationCommonMethods.GetDictonaryForMandatoryParameters(interfaceConfiguratonParameters, "applicableintype2", "mandatoryintype2");
                servicePointDetailsSettings.SourceFileLocation = MyConfigurationProject.GetConfigValue("type2FileLocation", out errorMessage);
                servicePointDetailsSettings.SuccessFileLocation = MyConfigurationProject.GetConfigValue("type2SuccessFile", out errorMessage);
                servicePointDetailsSettings.TargetFileExtension = MyConfigurationProject.GetConfigValue("type2SupportedFileType", out errorMessage);
                servicePointDetailsSettings.Type2RecordTag = MyConfigurationProject.GetConfigValue("MyApplicationtype2RecordTag", out errorMessage);

                return new Type2FileHandler(servicePointDetailsSettings, fileSyncBusiness, commonValidations, type2Adapter);
            default:
                throw new NotImplementedException("FileProvider type: " + Convert.ToInt32(fileprovider) + " is not implemented");
        }
    }
    }