2011-11-08 29 views
5

chúng ta vừa nâng cấp một dự án từ lăng kính 2.0 để Prism 4.0, và chúng tôi đang gặp vấn đề với Unity. Rõ ràng có một số thay đổi trong cấu hình XML container 2.0 thống nhất như chúng ta nhận được là lỗi đầu tiên của chúng ta "Yếu tố không được nhận ra" typeConfig '". Đây là mã:thay đổi cấu hình XML trong Unity 2.0

// ----------------------- App.config

<configSections> 
    <section name="runDataParserConfiguration" type="Microsoft.Practices.Unity.Configuration.UnityConfigurationSection, Microsoft.Practices.Unity.Configuration" /> 
    </configSections> 
    <runDataParserConfiguration> 
    <typeAliases> 
     <typeAlias alias="IRunDataDispatcher" type="RunDataParser.Interface.IRunDataDispatcher, RunDataParser.Interface" /> 
     <typeAlias alias="IRunDataParser" type="RunDataParser.Interface.IRunDataParser, RunDataParser.Interface" /> 
     <typeAlias alias="IRunDataParserArray" type="RunDataParser.Interface.IRunDataParser[], RunDataParser.Interface" /> 
     <typeAlias alias="Dispatcher" type="RunDataParser.Common.Dispatcher, RunDataParser.Common" /> 
     <typeAlias alias="Parser1" type="RunDataParser.Parser1, RunDataParser" /> 
     <typeAlias alias="Parser2" type="RunDataParser.Parser2, RunDataParser" /> 
     <typeAlias alias="Parser3" type="RunDataParser.Parser3,RunDataParser" /> 
     <typeAlias alias="Parser4" type="RunDataParser.Parser4, RunDataParser" /> 
     <typeAlias alias="Parser5" type="RunDataParser.Parser5, RunDataParser" /> 
     <typeAlias alias="Parser6" type="RunDataParser.Parser6, RunDataParser" /> 
     <typeAlias alias="Parser7" type="RunDataParser.Parser7, RunDataParser" /> 
     <typeAlias alias="Parser8" type="RunDataParser.Parser8, RunDataParser" /> 
     <typeAlias alias="Parser9" type="RunDataParser.Parser9, RunDataParser" /> 
    </typeAliases> 
    <containers> 
     <container> 
     <types> 
      <type type="IRunDataParser" mapTo="Parser1" name="parser1" /> 
      <type type="IRunDataParser" mapTo="Parser2" name="parser2" /> 
      <type type="IRunDataParser" mapTo="Parser3" name="parser3" /> 
      <type type="IRunDataParser" mapTo="Parser4" name="parser4" /> 
      <type type="IRunDataParser" mapTo="Parser5" name="parser5" /> 
      <type type="IRunDataParser" mapTo="Parser6" name="parser6" /> 
      <type type="IRunDataParser" mapTo="Parser7" name="parser7" /> 
      <type type="IRunDataParser" mapTo="Parser8" name="parser8" /> 
      <type type="IRunDataParser" mapTo="Parser9" name="parser9" /> 
      <type type="IRunDataDispatcher" mapTo="Dispatcher" name="runDataDispatcher" /> 
      <type type="Presentation.RawDataManagement.Wrapper.ParserDispatcherWrapper, RawDataManagement"> 
      <typeConfig> 
       <constructor> 
       <param name="runDataDispatcher" parameterType="Dispatcher" /> 
       <param name="runDataParsers" parameterType="IRunDataParserArray"> 
        <array> 
        <dependency name="parser1" /> 
        <dependency name="parser2" /> 
        <dependency name="parser3" /> 
        <dependency name="parser4" /> 
        <dependency name="parser5" /> 
        <dependency name="parser6" /> 
        <dependency name="parser7" /> 
        <dependency name="parser8" /> 
        <dependency name="parser9" /> 
        </array> 
       </param> 
       </constructor> 
      </typeConfig> 
      </type> 
     </types> 
     </container> 
    </containers> 

    </containers>  

// -------------------------------------------------- -

tôi nhận xét nút typeConfig và đã nhận lỗi "Không thuộc tính hợp lệ đã được tìm thấy để xây dựng giá trị cho tham số runDataDispatcher Vui lòng kiểm tra các file cấu hình.."

Sau đó và làm một số nghiên cứu tôi loại bỏ parameterType thuộc tính nhưng điều này đã không làm việc. Tôi nhận xét nút typeAliases và thay đổi các nút typeAlias ​​thành bí danh, cũng nhận xét các nút loại (dưới nút) và chọn các nút con của nó để đăng ký. Không làm việc này.

Trả lời

13

Cấu hình XML đã thay đổi giữa các phiên bản Unity 1.2 và 2.

Như bạn đề cập đến <typeAlias> tại là <alias><type> phải là một <register>.

Bạn có thể xóa các thẻ <typeAliases>, <containers>, <types><typeConfig>.

Nếu có thể hữu ích khi bạn thay đổi tên phần từ "runDataParserConfiguration" thành "unity" thì bạn sẽ có thể sử dụng intellisense để hướng dẫn cấu hình. Sau khi cấu hình, bạn luôn có thể thay đổi nó thành "runDataParserConfiguration" nếu bạn muốn.

cấu hình của bạn sẽ giống như thế:

<?xml version="1.0"?> 
<configuration> 
    <configSections> 
     <section name="runDataParserConfiguration" type="Microsoft.Practices.Unity.Configuration.UnityConfigurationSection, Microsoft.Practices.Unity.Configuration"/> 
    </configSections> 

    <runDataParserConfiguration xmlns="http://schemas.microsoft.com/practices/2010/unity"> 

     <alias alias="IRunDataDispatcher" type="RunDataParser.Interface.IRunDataDispatcher, RunDataParser.Interface" /> 
     <alias alias="IRunDataParser" type="RunDataParser.Interface.IRunDataParser, RunDataParser.Interface" /> 
     <alias alias="IRunDataParserArray" type="RunDataParser.Interface.IRunDataParser[], RunDataParser.Interface" /> 
     <alias alias="Dispatcher" type="RunDataParser.Common.Dispatcher, RunDataParser.Common" /> 
     <alias alias="Parser1" type="RunDataParser.Parser1, RunDataParser" /> 
     <alias alias="Parser2" type="RunDataParser.Parser2, RunDataParser" /> 

     <container> 
      <register name="parser1" type="IRunDataParser" mapTo="Parser1" /> 
      <register name="parser2" type="IRunDataParser" mapTo="Parser2" /> 
      <register name="ParserDispatcherWrapper" type="Presentation.RawDataManagement.Wrapper.ParserDispatcherWrapper, RawDataManagement"> 
       <constructor> 
        <param name="runDataDispatcher" type="Dispatcher" /> 
        <param name="runDataParsers" type="IRunDataParserArray"> 
         <array> 
          <dependency name="parser1" /> 
          <dependency name="parser2" /> 
         </array> 
        </param> 
       </constructor> 
      </register> 
     </container> 

    </runDataParserConfiguration> 
</configuration> 
+1

Hi Tuzo, cảm ơn câu trả lời của bạn !! Chúng tôi đã có cấu hình đúng. Tôi đã đăng mã trong [đây] (http://compositewpf.codeplex.com/discussions/278726), vì tôi không thể quản lý mã ở đây. – kima05

+2

Xin đừng quên đánh dấu câu hỏi này là "đã trả lời". – ErnieL

0

Mặc dù câu trả lời bằng cách @RandyLevy giúp tôi với hầu hết các yếu tố, tôi cần phải làm nhiều hơn một vài thay đổi. Những người không có trong tập tin của OP, nhưng tôi sẽ thêm chúng cho bất cứ ai chạy vào Unity 1,2-2,0 nâng cấp các vấn đề.

tôi ứng dụng của tôi, phụ thuộc không được bơm ra thông qua các nhà xây dựng, nhưng thông qua các thuộc tính công cộng (đừng hỏi tại sao).

Vì vậy, tôi có những yếu tố cấu hình như:

<type type="IMyService" mapTo="MyService"> 
    <typeConfig extensionType="Microsoft.Practices.Unity.Configuration.TypeInjectionElement, Microsoft.Practices.Unity.Configuration"> 
    <property name="CurrentDataContext" propertyType="IDataContext" /> 
    </typeConfig> 
</type> 

có thể được sửa đổi để:

<register type="IMyService" mapTo="MyService"> 
    <property name="CurrentDataContext" dependencyType="IDataContext" /> 
</register> 

The Unity Configuration Schema có thể sẽ giúp bạn với các yếu tố chưa khác.

Các vấn đề liên quan